在 WebAPI2 中使用路由名称而不是 routeTemplate 访问路由

Access Routing using route name instead of routeTemplate in WebAPI2

我是网络新手 API。我现在正在创建示例应用程序并尝试在其中理解路由。

这是我的场景:

我有 AuthorController 和 2 个操作方法,例如:

public IHttpActionResult GetAuthor(int id){//logic}
public IHttpActionResult GetAuthorByName(string name){//logic}

这是默认路由:

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

现在我想访问第二种方法 GetAuthorByName,使用不同的路径,例如:

 config.Routes.MapHttpRoute(
            name: "routename",
            routeTemplate: "api/RandomName/GetAuthorByName/{id}",
            defaults: new { controller = "Authors", action = "GetAuthorByName", id = RouteParameter.Optional }

        );

这样当我访问 http://localhost:1234/api/RandomName/GetAuthorByName?Title=Kajal 时,它应该调用我传入参数的控制器和操作方法。

这在 Web API 中可行吗?或者如何使用路由名称访问我的操作方法?

请注意,我使用 Firefox 的 Rest 客户端调用方法。

是的,在 Web 中是可能的 API。您可以为该控制器和操作方法指定路由。这可以通过 attribute routing (introduced in Web API 2) or with regular routing.

来完成

由于您使用的是常规路由,因此需要在 routeTemplate 中指定参数 'name',如下所示。如果您在默认路由之前注册此路由,将访问 URL 以点击操作方法。 http://localhost:1234/api/RandomName/GetAuthorByName/Kajal

config.Routes.MapHttpRoute(
            name: "routename",
            routeTemplate: "api/RandomName/GetAuthorByName/{name}",
            defaults: new { controller = "Authors", action = "GetAuthorByName", name = RouteParameter.Optional }

        );