ASP.. NET WebApi Post方法- 404传递参数时

本文关键字:参数 NET WebApi Post 方法 ASP | 更新日期: 2023-09-27 18:17:50

我怎么也想不明白。我有一个web api控制器与Get和Post方法。Get方法在有参数和没有参数的情况下工作得很好,但是当我试图向它添加一个String参数时,帖子中断了。下面是我的代码。

路线:

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{id}",
            defaults: new { id = UrlParameter.Optional }
        );

控制器:

public class AuditController : ApiController
{
    public String Post(String test)
    {
        return "Success : " + test;
    }
    public String Get(String test)
    {
        return "Success : " + test;
    }
}
请求:

    var request = WebRequest.Create("http://localhost:42652/Audit");
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        using (var writer = new StreamWriter(request.GetRequestStream()))
        {
            writer.Write("test=TEST");
        }
        WebResponse webResponse = request.GetResponse();

我已经尝试了很多不同的要求,我觉得有一些简单的我错过了。谢谢你的帮助。

ASP.. NET WebApi Post方法- 404传递参数时

由于您期望参数test来自请求的主体,因此您需要用FromBody属性来装饰它。例如:([FromBody]String test)。对于其他复杂类型,这是不正确的,例如:Employee类,它被隐式地认为来自Body。

关于GET请求。它应该只与来自查询字符串/Audit?test=Mike

的测试一起工作

下面的博文有更多关于参数绑定的细节:http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

另外,我看到你正在使用WebRequest。你考虑过使用System.Net.Http的HttpClient吗?

更改AuditController以包含FromBody属性:

public class AuditController : ApiController
{
    public String Post([FromBody]String test)
    {
        return "Success : " + test;
    }
    public String Get(String test)
    {
        return "Success : " + test;
    }
}

cf。http://msdn.microsoft.com/en-us/library/system.web.http.frombodyattribute (v = vs.108) . aspx