gpt4 book ai didi

asp.net-mvc-4 - webapi接收空参数

转载 作者:行者123 更新时间:2023-12-01 15:20:22 25 4
gpt4 key购买 nike

我正在尝试将一个对象发布到接受复杂类型作为参数但接收到的参数为空的 WebAPI Controller 。任何想法为什么?请求正确命中 WebAPI 方法且参数为空。

型号:

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 项目中引用它]

namespace MASReports.Controllers
{
public ActionResult Reports(StatsCriteria criteria)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.PostAsJsonAsync("http://localhost:52765/api/reports", criteria.Masnums.ToString()).Result;
return View("CMAReport", response);
}
}

这是我在 Webapi 中的 Controller 的签名。 [ StatsCriteria 是 BLL 项目的一部分,我在 ReportsAPI 项目中引用了该项目] [CMAReportVM、CMAReport 是项目 BLL 的一部分,我在 ReportsAPIproject 中引用了 BLL 项目]

namespace ReportsAPI.Controllers
{
public class ReportsController : ApiController
{
[HttpPost]
public CMAReportVM Reports([FromBody] StatsCriteria criteria)
{
var cmaReport = Service3.GetCMAReport(criteria.Masnums);
//Create Map to enable mapping business object to View Model
Mapper.CreateMap<CMAReport, CMAReportVM>();
// Maps model to VM model class
var cmaVM = Mapper.Map<CMAReport, CMAReportVM>(cmaReport);
reutn cmaVM;
}
}
}

//这是我的路由:

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

这是我的 Web api 的 Golbal.asax

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;

您的 Controller 方法需要一个 StatsCriteria 对象。要么更改 Controller 方法的签名以接受字符串,要么更改 post 调用。假设 Controller 方法签名是正确的,帖子应该是这样的:

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

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

关于asp.net-mvc-4 - webapi接收空参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19775332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com