属性路由和 CreatedAtRoute
Attribute Routing and CreatedAtRoute
我正在尝试将我的 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 想要路线的名称但找不到它。那么属性路由是如何处理的呢?
好的...一旦您了解发生了什么,这就很容易了。在属性路由中,您必须指定路由的名称以检索资源。所以在我的 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);
我正在尝试将我的 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 想要路线的名称但找不到它。那么属性路由是如何处理的呢?
好的...一旦您了解发生了什么,这就很容易了。在属性路由中,您必须指定路由的名称以检索资源。所以在我的 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);