c# - OWIN ApiController 访问请求正文/字符串化 JSON

标签 c# asp.net json asp.net-web-api owin

这是在 OWIN 和 .Net 4.5.2 中

使用调试证明网络请求正在调用此 Controller 的方法。

我的意思是请求正文包含一个 JSON 字符串化对象:

"{ 'id':'12', 'text1':'hello', 'test2':'world' }"

在线路上传输时进行适当编码。

我已经尝试了很多东西,现在我很困惑。

我如何获取解码后的字符串,以便我可以使用 JSON.Parse() 或更好的方法让 .Net 只给我一个对象?

在一个版本中(很久以前)我为这个对象定义了一个类型。如果我需要那么大,不是一个高挑战。但是,如果我只有字符串中的 JSON 对象,那也没问题。

public class cController : ApiController {

    [HttpPut]
    public string put(string id) {
        var bdy = this.Request.Content;

        //Console.WriteLine("PUT containers {0}", body);
        return string.Empty;
    }
}

如果有帮助,bdy.ContentReadStream 为空。我不知道这是好事、坏事还是重要的。也许 Request.Content 不是要走的路,但在我看来,如果我要将正文作为流读取,那么它不应该为空。

我还尝试通过 System.Web.HttpContext 工作。如果那是某种程度上的答案,我可以毫无疑问地回到那个问题。但我找不到秘诀。

最佳答案

将所需的模型作为参数传递给操作,框架应该能够解析它,前提是它是有效的 JSON

public class cController : ApiController {

    [HttpPut]
    public IHttpActionResult Put(string id,[FromBody] Model body) {
        if(ModelState.IsValue) {    
            return Ok(body.text1);
        }
        return BadRequest();
    }
}

其中 Model 定义为

public class Model {
    public string id { get; set; }
    public string text1 { get; set; }
    public string test2 { get; set; }
}

关于c# - OWIN ApiController 访问请求正文/字符串化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43146890/

相关文章:

jquery - Asp文件上传控件是否有文件

asp.net - 如何使启用 session 的 ASP.NET Web 服务与不同域中的 ajax 客户端一起工作?

json - 数据未被搜索栏过滤

c# - 将简单的 SET 与 StackExchangeRedis 结合使用?

c# - xamarin 形成清除选择器选择

c# - Azure 移动服务登录数据库和 "master"用户时出现错误

c# - 为什么TextBlock不是路由事件上的OriginalSource?

c# - 美化 C# 语法

php - 正确编码和解码 json 结果(php 到 js)

c# - JSON不能反序列化为对象,需要数组?