Asp.net mvc 4 webapi接收空参数

Asp.net mvc 4 webapi接收空参数,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,我试图将一个对象发布到一个WebAPI控制器,该控制器接受复杂类型作为参数,但接收的参数为null。你知道为什么吗?请求正确命中WebAPI方法,且参数为null 型号: namespace DMAX.BLL.MASReports.Models { public class StatsCriteria { #region Constructors and Methods public StatsCriteria()

我试图将一个对象发布到一个WebAPI控制器,该控制器接受复杂类型作为参数,但接收的参数为null。你知道为什么吗?请求正确命中WebAPI方法,且参数为null

型号:

namespace DMAX.BLL.MASReports.Models
{
     public class StatsCriteria
        {
            #region Constructors and Methods
            public StatsCriteria()
            {

            }
            #endregion

            #region Properties and Fields
            private string _masnum;
            private string _notchosen;
            private int _currentPage = 1;
            private bool _isPrint = false;
            private bool _isEmail = false;
            private bool _isAjax = false;
            public string Masnums { get {
                if (!string.IsNullOrEmpty(_masnum)) {
                    _masnum =  _masnum.Replace("'", "");
                    if (!string.IsNullOrEmpty(NotChosen)) {
                        string[] notchosenlist = NotChosen.Split(',');
                        foreach (var notchosen in notchosenlist) {
                           _masnum = this.RemoveNotChosen(_masnum, notchosen);
                        }
                    }
                    return _masnum;
                }
                return null;
            } 
                set { _masnum = value; } 
            }

            public string AgentId { get; set; }
            public string LicenseNum { get; set; }
            public string AgentFullName { get; set; }
            public string HeaderName { get; set; }


            #endregion
        }
    }
}
以下是客户端的代码:[StatsCriteria是项目BLL的一部分,我正在MASReports项目中引用它]

这是我的控制器在Webapi中的签名。 [国家标准是BLL项目的一部分,我在ReportsAPI项目中提到了该项目] [CMAReportVM、CMAReport是项目BLL的一部分,我在ReportsApipProject中提到了BLL项目]

这是我的Golbal.asax Web api

namespace ReportsAPI
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new  QueryStringMapping("json", "true", "application/json"));
         }
    }
}

您正在发布一个字符串:

     var response = client.PostAsJsonAsync("http://localhost:52765/api/reports", criteria.Masnums.ToString()).Result;
您的控制器方法需要一个
StatsCriteria
对象。更改控制器方法的签名以接受字符串或更改post调用。 假设控制器方法签名正确,则post应该如下所示:

     var response = client.PostAsJsonAsync("http://localhost:52765/api/reports", criteria).Result;

如果这没有帮助,我建议使用fiddler检查发布消息时消息的外观。

检查模型状态是否存在任何错误。response={StatusCode:500,ReasonPhrase:'Internal Server Error',…抱歉,我不是很清楚…您可以在操作开始时添加以下代码以查看更详细的错误:
If(!ModelState.IsValid){抛出新的HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest,this.ModelState));}
…顺便问一下,在上述500个响应中,您是否看到任何错误消息?我得到以下错误:System.Web.HttpRequestBase不包含“CreateErrorResponse”。除了500响应之外,我没有看到任何错误。但是当我调试时,我确实看到Web api的参数值为空。
namespace ReportsAPI
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new  QueryStringMapping("json", "true", "application/json"));
         }
    }
}
     var response = client.PostAsJsonAsync("http://localhost:52765/api/reports", criteria.Masnums.ToString()).Result;
     var response = client.PostAsJsonAsync("http://localhost:52765/api/reports", criteria).Result;