我正在以以下形式向服务器发送请求:

http://localhost:12345/api/controller/par1/par2

请求被正确解析为以下方法:

[HttpPost]
public void object Post(string par1, string par2)

但是,我通过请求内容传递附加数据.如何检索这些数据?

为了便于示例,我们假设请求是从表单发送的:

<form action="http://localhost:12345/api/controller/par1/par2" method="post">
    <input type="hidden" name="data" value="value" />
    <input type="submit" name="submit" value="Submit" />
</form>

推荐答案

从这个问题的answer开始:

  1. 使用参数绑定自动搜索;请注意,dynamicJToken组成,因此是.Value存取器.

    public void Post([FromBody]dynamic value) {
        var x = value.var1.Value; // JToken
    }
    
  2. 读起来就像Request.RequestUri.ParseQueryString()[key]

    public async Task Post() {        
       dynamic obj = await Request.Content.ReadAsAsync<JObject>();
       var y = obj.var1;
    }
    
  3. 与#2相同,只是不是异步(?)所以你可以在助手方法中使用它

    private T GetPostParam<T>(string key) {
        var p = Request.Content.ReadAsAsync<JObject>();
        return (T)Convert.ChangeType(p.Result[key], typeof(T)); // example conversion, could be null...
    }
    

警告——需要媒体类型application/json才能触发JsonMediaTypeFormatter处理.

Asp.net相关问答推荐

无法为媒体类型application/x-www-form-urlencoded生成样本

检测 ASP.NET 中的内存泄漏

我可以在一个 Web 项目中有多个 web.config 文件吗?

'Access-Control-Allow-Origin' 标头包含多个值 '*, *',但只允许一个

Azure Service Fabric 是否与 Docker 做同样的事情?

如何在 ASP.NET core rc2 中禁用浏览器缓存?

ASP.NET MVC 5 中的路由可选参数

回发后动态创建的控件丢失数据

为应用程序池Classic .NET AppPool提供服务的进程与 Windows 进程激活服务发生了致命的通信错误

实体框架:如何解决外键约束可能导致循环或多个级联路径?

如何获取正在访问 ASP.NET 应用程序的当前用户?

带有 2 个提交按钮/操作的 ASP.Net MVC 4 表单

.NET - c# - 需要跨分区查询,但在 DocumentDB 数据访问上禁用了问题

Web API 必填参数

对于 DB ID,需要一个较小的 GUID 替代方案,但对于 URL 仍然是唯一且随机的

使用 Twitter Bootstrap 在 @html.actionlink 中显示 html

将字符串转换为时间

在 Visual Studio 2012 中调试 .NET Framework 源代码?

如何调试 w3wp clr.dll 错误

在没有等待 #2 的情况下调用异步方法