Asp.net mvc 4 webapi接收空参数
我试图将一个对象发布到一个WebAPI控制器,该控制器接受复杂类型作为参数,但接收的参数为null。你知道为什么吗?请求正确命中WebAPI方法,且参数为null 型号: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()
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;