WepApi 路由和路由前缀混淆

本文关键字:路由 WepApi 前缀 | 更新日期: 2023-09-27 18:31:38

我有这个控制器:

[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);
    }
}

下面的 URL 点击此路线是否正确?

/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}替换

WepApi 路由和路由前缀混淆

使用您的配置,正确的 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]定义值的来源。