相关疑难解决方法(0)

在WebApi控制器中读取HttpContent

如何在MVC webApi控制器操作中读取PUT请求中的内容.

[HttpPut]
public HttpResponseMessage Put(int accountId, Contact contact)
{
    var httpContent = Request.Content;
    var asyncContent = httpContent.ReadAsStringAsync().Result;
...
Run Code Online (Sandbox Code Playgroud)

我在这里得到空字符串:(

我需要做的是:弄清楚在初始请求中修改/发送了什么属性(意味着如果Contact对象有10个属性,并且我只想更新其中2个属性,我只发送和对象只有两个属性,这样的事情:

{

    "FirstName": null,
    "LastName": null,
    "id": 21
}
Run Code Online (Sandbox Code Playgroud)

预期的最终结果是

List<string> modified_properties = {"FirstName", "LastName"}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc asp.net-web-api httpcontent

67
推荐指数
3
解决办法
11万
查看次数

Web Api请求在将内容复制到流时会出现"错误".

我正在尝试实现此代码示例,但得到HttpRequestException- " 将内容复制到流时出错 ".ReadAsStringAsync()调用方法时 内部异常是" 无法访问已处置的对象".我正在使用Fiddler来提出请求.我不明白.有人可以解释为什么我得到这个例外并提供解决方案吗?

Web Api方法:

public async Task<HttpResponseMessage> Post(HttpRequestMessage request)
{
    try
    {
        var jsonString = await request.Content.ReadAsStringAsync();
    }
    catch (Exception ex)
    {                
        throw;
    }
    return new HttpResponseMessage(HttpStatusCode.Created);
}
Run Code Online (Sandbox Code Playgroud)

提琴手(POST):

User-Agent: Fiddler
Host: localhost:23567
Content-Length: 18
Content-Type: application/json; charset=utf-8
Body{"Test":1}
Run Code Online (Sandbox Code Playgroud)

编辑:

我有一个线索,但需要验证.在Web Api控制器上,我有一个ActionFilterAttribute并且在它的OnActionExecuting覆盖中,有这一行:

public override async void OnActionExecuting(HttpActionContext actionContext)
{
    // omitted code
    actionContext.Request.Content.ReadAsStreamAsync();
}
Run Code Online (Sandbox Code Playgroud)

可能是因为内容在这里被读取,它再也无法使用?如果是这样,我怎么能在方法中使它?此处的内容是否与HttpRequestMessage相同? 可能包含答案.

c# asp.net-web-api

10
推荐指数
2
解决办法
2万
查看次数

ASP.NET Web API记录入站请求内容

我正在尝试注销Web API请求内容 - 即json字符串.我实现了一个ITraceWriter类(示例)并对其进行了配置,以便Web API在管道中调用它.但是,如果我读取请求.内容或复制到流中读取它不适用于导致空模型的方法. 这篇文章稍微谈到了这个问题.任何人都有登出入站Web API请求内容的经验,并知道最佳方法是什么?

谢谢

更新A.

我创建了一个简单的示例Web API项目来排除项目​​中的任何内容,我仍然看到由于日志记录,模型将为null.我只是通过Fidder发布测试连续几次,看看我的模型是否为null.有了断点,它可能会起作用,这就是为什么我认为存在同步/计时问题.有关如何使其工作的任何想法?

标题:

User-Agent: Fiddler
Host: localhost:56824
Content-Type: application/json
Content-Length: 22
Run Code Online (Sandbox Code Playgroud)

身体:

{
"A":1,"B":"test"
}
Run Code Online (Sandbox Code Playgroud)

这是代码:

控制器:

public class ValuesController : ApiController
{
    [HttpPost]
    public void Post(ValuesModel model)
    {
        if (model == null)
        {
            Debug.WriteLine("model was null!");
        }
        else
        {
            Debug.WriteLine("model was NOT null!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

模型:

public class ValuesModel
{
    public int A { get; set; }
    public string B { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

记录仪: …

asp.net-mvc asp.net-web-api

9
推荐指数
1
解决办法
8017
查看次数

标签 统计

asp.net-web-api ×3

asp.net-mvc ×2

c# ×2

httpcontent ×1