Web Api路由和RoutePrefix混淆

时间:2014-11-24 11:42:59

标签: c# asp.net-web-api asp.net-web-api-routing

我有这个控制器:

[Authorize(Roles = Roles.Administrator),
RoutePrefix("Api/Portal/User")]
public class UserController : ServiceApiController
{
    /// <summary>
    /// Gets all User associated with the Account
    /// </summary>
    /// <param name="accountId">
    /// The account id.
    /// </param>
    /// <returns>
    /// The <see cref="JsonResponse"/>.
    /// </returns>
    [Route("{accountId:guid}")]
    public JsonResponse<UserDto> Get(Guid accountId)
    {
        return new JsonResponse<UserDto>("Success", true);
    }
}

下面的网址是否正确显示此路线?

/Api/Portal/User?accountId=5cbcec52-f417-48a2-a241-470e48518858

我正在使用Fiddler执行GET请求。

我在这里有点困惑。我的路线设置如下:

public static void Register(HttpConfiguration config)
{
    // Web API configuration and services

    // Web API routes
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "Api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional });
}

另一个问题,我的路线前缀是Api/Portal/User,而User将作为实际控制器保持不变,因此可以替换为Api/Portal/[controller]Api/Portal/{controller}

1 个答案:

答案 0 :(得分:1)

使用您的配置,正确的URL将是

/Api/Portal/User/5cbcec52-f417-48a2-a241-470e48518858

如果您想使用其他Url,则必须更改控制器方法,如下所示:

[Route("{accountId:guid}")]
public JsonResponse<UserDto> Get([FromUri]Guid accountId)
{
    return new JsonResponse<UserDto>("Success", true);
}

参数属性[FromUri]定义了值的来源。

相关问题