【问题标题】:Asp.net web api routing to be like mvc siteAsp.net web api 路由就像 mvc 站点
【发布时间】:2014-03-04 13:02:00
【问题描述】:

如何添加路由,以便我的控制器能够像 mvc web 应用程序一样工作。

因为他们配置路由的默认方式最终会导致您拥有如此多的控制器。

我只想拥有一个名为 Auth 的控制器,

然后在我的 Web API 中可以调用 api/auth/loginapi/auth/logout 等。 因为使用默认路由,我必须创建一个用于登录的控制器和一个用于注销的控制器。

那么我的控制器应该是这样的:

public class AuthController : ApiController
{

    [HttpPost]
    public IEnumerable<string> Login()
    {
        return new string[] { "value1", "value2" };
    }

    [HttpGet]
    public HttpMessageHandler Logout()
    {
        return new HttpMessageHandler.
    }
}

【问题讨论】:

    标签: asp.net asp.net-web-api asp.net-mvc-routing url-routing


    【解决方案1】:

    默认的 Web API 路由使用 http 方法来确定要选择的操作。例如,POST api/auth 将在 AuthController 上查找名为 Post 的操作。

    如果你想使用 RPC 风格的路由(如 MVC)你需要将默认路由更改为:

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

    现在POST api/auth/login 将在AuthController 上查找名为Login 的操作。

    【讨论】:

    • 那我是不是像 mvc 中一样指定 Get、POST 等作为过滤器类型?
    • 你不能在 MVC 中做基于 HTTP 方法的路由,你必须指定动作名称。您使用[HttpGet/HttpPost] 过滤器来约束 Action 可以处理的请求类型,而不是它是否会真正匹配路由。
    • 那么我如何在控制器中指定它是获取还是发布?查看我的编辑
    • 好的,但是我将如何拥有一个名为 login 的控制器,它可以为 GET 和 POST 提供服务。这可能吗?
    • 是的,这是默认行为或 Web API(不是您在问题中提出的问题)。使用操作Get/Post 创建一个新的LoginController。如果您的问题发生了变化,请开始一个新帖子,而不是更改您当前的问题。
    猜你喜欢
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多