WebAPI C#路由

dms*_*las 2 c# asp.net-web-api

我有两个终点:

  • api/v1/user/session (用于创建带有发布请求的用户登录)
  • api/v1/user (用于创建发布请求的用户)

如何在同一个控制器中路由这两个端点?我还想为特定请求指定操作.更清楚:

所有get,post,update,patch操作都可以在api/v1/user/session端点完成

所有get,post,update,patch操作都可以在api/v1/user端点完成

可能吗 ?

例:

config.Routes.MapHttpRoute(
    "UserApi",
    "api/v1/{controller}/session",
    new { controller = "User", action="Session" });
Run Code Online (Sandbox Code Playgroud)

现在,我希望所有其他请求都适用于具有[httpPost],[httpGet]等属性的Session方法.

       config.Routes.MapHttpRoute("lol", "api/v1/{controller}/session", 
            new { controller = "User", action="Session" });

        //config.Routes.MapHttpRoute(
        //    name: "LoginApi",
        //    routeTemplate: "api/v1/{controller}",
        //    defaults: new { controller = "User"}
        //);

        config.Routes.MapHttpRoute(
            name: "RailStationApi",
            routeTemplate: "api/v1/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
Run Code Online (Sandbox Code Playgroud)

Ric*_*ard 5

我建议你看看属性路由 - 这比使用中央配置要容易得多.

[RoutePrefix("api/v1")]
public class UserController : ApiController {

    [HttpPost]
    [Route("user/session")]
    public void Login(/*...*/) {
        // ...
    }

    [HttpGet]
    [Route("user/session")]    // Note this has the same route as Login
    public SessionResult GetSession(/*...*/) {
        // ...
    }

    [HttpPost]
    [Route("user")]
    public void CreateUser(/*...*/) {
        // ...
    }

}
Run Code Online (Sandbox Code Playgroud)

请注意,您在技术上并不需要,[HttpPost]因为它是默认设置,但为了清楚起见,我将其包括在内.您可以用相同的方式添加其他Http动词的方法.