簡體   English   中英

C#WebAPI限制路由

[英]C# webAPI restrict route

在webapi項目的WebAPIConfig.cs中,添加了2條路由

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

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

我嘗試創建一個包含以下功能的apiController

[HttpGet]
public string Get(int id)
{
    return "get";
}
[HttpGet]
[ActionName("ByWait")]
public string[] ByWait(int id)
{
    return "bywait";
}

我希望請求/ api / controllername / 1234返回“ get”,而請求/ api / controllername / bywait / 1234返回“ bywait”。

但是,實際結果是/ api / controllername / 1234 >>引發異常找到多個與請求匹配的動作/ api / controllername / bywait / 1234 >>“通過等待”

但是可以解決此問題嗎? st如何限制功能ByWait僅接受包含操作的請求,以便僅響應/ api / controllername / bywait / 1234並忽略/ api / controllername / 1234

還是有其他更好的解決方案?

謝謝

首先,您可以更改WebApiConfig:

config.Routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}/{id}"
);

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

然后控制器:

[HttpGet]
public string Get()
{
    return "get-default";
}

[HttpGet]
public string Get(int id)
{
    return "get" + id;
}

[HttpGet]
[Route("api/values/bywait/{id}")]
public string ByWait(int id)
{
    return "bywait";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM