ASP.Net MVC 4 API 自定义方法名称
本文关键字:自定义方法 API Net MVC ASP | 更新日期: 2023-09-27 18:31:57
我有一个问题,我想用自定义名称调用MVC Api方法。
我更改了 WebApi.config,如此处所述
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id="test" }
);
并写了一个类
public class MissingCardBoxModelController : ApiController
{
// GET api/missingcardboxmodel
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/missingcardboxmodel/5
public string Get(string id)
{
return id;
}
public string GetTrackingNumber(string parcelLabelNumber)
{
string trackingNumber = "some number";
return trackingNumber;
}
// POST api/missingcardboxmodel
public void Post([FromBody]string value)
{
}
// PUT api/missingcardboxmodel/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/missingcardboxmodel/5
public void Delete(int id)
{
}
}
但是我无法通过 http://localhost:58528/api/MissingCardBoxModel/GetTrackingNumber/123456 调用该方法
我收到消息
在控制器"Missing CardBoxModel"上未找到任何操作 匹配请求。
为什么我不能调用该方法?
如果路由配置为这些(MVC 解决方案模板中的默认值):
url: "{controller}/{action}/{id}"
您应该将parcelLabelNumber
更改为 id。
您可以在此处阅读有关路线的更多信息。
默认情况下,
Web API 允许 Restful 约定,这意味着它将自动映射GET, PUT, POST, DELETE
等操作名称。 如果您在路线中查看WebApiConfig
,则只允许以下路线
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
这意味着它只允许
.../api/yourcontrollername/a parameter that will map to id
.您基本上有 2 个选项,一个使用属性路由。或者,您可以将路由添加到自定义方法中,例如:
config.Routes.MapHttpRoute(
name: "custom",
routeTemplate: "api/{controller}/{action}/{parcelLabelNumber}",
defaults: new { parcelLabelNumber = "" }
);
另请注意此处的参数名称"parcelLabelNumber",您必须在此处命名与操作中的参数相同。您应该能够在 - http://localhost:23691/api/MissingCardBoxModel/GetTrackingNumber/1245
另外,请看一下一般的路由