Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 属性路由和CreatedAtRoute_C#_Asp.net Web Api_Asp.net Web Api Routing - Fatal编程技术网

C# 属性路由和CreatedAtRoute

C# 属性路由和CreatedAtRoute,c#,asp.net-web-api,asp.net-web-api-routing,C#,Asp.net Web Api,Asp.net Web Api Routing,我正在尝试将我的Web Api项目转换为使用属性路由。我不理解的一件事是POST请求的CreatedAtRoute方法。在我的WebApiConfig.cs中,我曾经有一个 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/account/{accountId}/site/{siteId}/visitor/{visitorId}/session/{sessionI

我正在尝试将我的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 }
        );

我把它注释掉了,认为它不再需要了,但是想要路线的名称,却找不到它。那么,属性路由是如何处理的呢?

好的……一旦你看到发生了什么,这就很容易了。在属性路由中,必须指定要检索资源的路由的名称。因此,在我的GET操作中,它看起来是这样的:

[Route("{sessionId}",Name="GetSession")]
    [ResponseType(typeof(Session))]
    public async Task<IHttpActionResult> Get(HttpRequestMessage request, int accountId, int siteId, Guid visitorId, Guid sessionId)
为此:

return CreatedAtRoute("GetSession", new
        {
            visitorId = session.VisitorId,
            sessionId = session.SessionId
        }, session);
return CreatedAtRoute("GetSession", new
        {
            visitorId = session.VisitorId,
            sessionId = session.SessionId
        }, session);