繁体   English   中英

如何将参数传递给Web API2

[英]How to pass parameters to web api2

控制器签名:

public class UserAlertsController : ApiController

public IHttpActionResult Post(Guid id, List<long> users)

路线:

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

邮递员要求:

http://localhost:50828/api/UserAlerts/4af3fee7-84ae-48fa-9215-45a00c35dbf

Content-Type application/json

[1,2]

通过以上设置,我收到以下消息:

"Message": "The request is invalid.",
"MessageDetail": "The parameters dictionary contains a null entry
                  for parameter 'id' of non-nullable type 'System.Guid'"

我也使用标准的global.asax

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
}

谁能告诉我我要去哪里错了

如果我将动作签名更改为:

public IHttpActionResult Post(string id, long[] users)

然后将其正确绑定,但是如果将id更改为Guid,则会引发错误。

编辑

您传递4af3fee7-84ae-48fa-9215-45a00c35dbf GUID的4af3fee7-84ae-48fa-9215-45a00c35dbf犯了一个错误,应该传递4af3fee7-84ae-48fa-9215-45a00c35dbf6注意最后的6

根据您的原始问题

问题出在您的路线上,您应该使用: "api/{controller}/{id}"作为路线网址模板。

您将guid作为路由参数传递,但是您的路由与您使用的网址不匹配。

打开WebApi.Config并将默认路由更改为此路由:

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

还要确保已在Application_Start global.asax中注册了WebApiConfig

GlobalConfiguration.Configure(WebApiConfig.Register);

边注:

默认情况下,Web API使用以下规则来绑定参数:

  • 如果参数是“简单”类型,则Web API会尝试从URI中获取值。 简单类型包括.NET基本类型(int,bool,double等),以及TimeSpan,DateTime,Guid,十进制和字符串,以及带有可从字符串转换的类型转换器的任何类型。

  • 对于复杂类型,Web API尝试使用媒体类型格式化程序从消息正文中读取值。

您要传递的GUID值位于标题中。 您可以通过FromUri属性指定要从uri接收值:

public IHttpActionResult Post([FromUri]Guid id, List<long> users)

另一个问题是您的HTTP URL中包含“ api”部分:

http://localhost:50828/api/UserAlerts/4af3fee7-84ae-48fa-9215-45a00c35dbf

当您的控制器在声明中丢失它时。 从您的网址中删除“ api”部分,或将其添加到您的路由中。

可以这样:

http://localhost:50828/UserAlerts/4af3fee7-84ae-48fa-9215-45a00c35dbf

或在MapRoute下修改您的url

url: "api/{controller}/{action}/{id}",

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM