使用路由名称而不是WebAPI2中的routeTemplate进行访问路由

时间:2016-07-01 06:54:21

标签: routing asp.net-web-api2 asp.net-web-api-routing

我是Web 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客户端来调用方法。

1 个答案:

答案 0 :(得分:1)

是的,可以在Web API中使用。您可以为该控制器和操作方法指定路由。这可以使用attribute routing(在Web API 2中引入)或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 }

        );