NET API有一个POST方法,然后返回CreatedataRoute响应(201)。问题是,当返回CreatedAtRoute响应时,我们得到错误“在路由集合中找不到名为“X”的路由”,其中X是我们的路由名称。
全球.asax
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
GlobalConfiguration.Configuration.UseStructureMap<MasterRegistry>();
var allDirectRoutes = WebApiConfig.GlobalObservableDirectRouteProvider.DirectRoutes;
}
WebApi。配置-我们在默认路由之前声明了MapHttpAttribute。
public static class WebApiConfig
{
public static ObservableDirectRouteProvider GlobalObservableDirectRouteProvider = new ObservableDirectRouteProvider();
public static void Register(HttpConfiguration config)
{
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
// Web API routes
config.MapHttpAttributeRoutes(GlobalObservableDirectRouteProvider);
config.Routes.MapHttpRoute(
"DefaultApi",
"api/v1/{controller}/{id}",
new { id = RouteParameter.Optional }
);
}
}
控制器-GetCompoundById路由
这是我们要使用命名路由构建的路由
[HttpGet]
[Route("{id:Guid}", Name = "GetCompoundById")]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(CompoundViewModel))]
public async Task<IHttpActionResult> Get(Guid id)
{
var serviceResult = await Task.FromResult(CompoundService.Get(id));
if (serviceResult == null)
{
return NotFound();
}
CompoundViewModel result =
new CompoundViewModel {Id = serviceResult.Id, Name = serviceResult.Name};
return Ok(result);
}
控制器-在POST操作中返回CreatedAtRoute
这是由于找不到命名路由而引发错误的地方。
return CreatedAtRoute("GetCompoundById", new {id = result.Id}, result);
注意:在WebApi中。配置我已经创建了一个ObservableDirectRouteProvider,它允许我查看启动时创建的路由,并且我可以看到我的命名路由存在于集合中。