我正在尝试将我的Web Api项目转换为使用属性路由。我不理解的一件事是POST请求的CreatedAtRoute方法。在我的WebApiConfig.cs中,我曾经有过
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/account/{accountId}/site/{siteId}/visitor/{visitorId}/session/{sessionId}/{controller}/{action}",
defaults: new { action = RouteParameter.Optional }
);
我认为这不再需要,但是CreatedAtRoute想要路线的名称并且无法找到它。那么如何处理属性路由?
答案 0 :(得分:27)
好的......一旦你看到最新情况,这很容易。在属性路由中,您必须指定要检索资源的路由的名称。所以在我的GET操作上它看起来像这样:
[Route("{sessionId}",Name="GetSession")]
[ResponseType(typeof(Session))]
public async Task<IHttpActionResult> Get(HttpRequestMessage request, int accountId, int siteId, Guid visitorId, Guid sessionId)
然后在POST操作中更改CreatedAtRoute:
return CreatedAtRoute("DefaultApi", new
{
controller: "session"
visitorId = session.VisitorId,
sessionId = session.SessionId
}, session);
对此:
return CreatedAtRoute("GetSession", new
{
visitorId = session.VisitorId,
sessionId = session.SessionId
}, session);