简体   繁体   中英

Set action name as route attribute automatically in ASP.NET Web API 2

I just checked attribute routing in ASP.NET Web API 2 . In that I can use RoutePrefix attribute at class level to set prefix to all action name URL. Mostly I use action name as URL routing for particular action. Is there any way that I write a single line of code which set action name as default value for Route attribute for all action? I want that because I am using action name as URI template, so it will be duplication on top of each action name.

[RoutePrefix("api")]
//[Route("{action}")]     // Possible I could write like this
public class BooksController : ApiController
{
    [Route("GetBooks")]     //Route value same as action name, http://localhost:xxxx/api/GetBooks
    public object GetBooks() { ... }

    [Route("CreateBook")]     //Route value same as action name, http://localhost:xxxx/api/CreateBook
    [HttpPost]
    public object CreateBook(Book book) { ... }
}

EDIT 1 : I want to use attribute routing because I want web API URL pattern like this http://hostname/api/action_name . My application uses single API controller, so I don't want controller name as part of action URI.

Solution : [Route("{action}")] on class level will work, if you remove route attribute from all other action unless you want to override for any action.

Personally I would just not use attribute routing and instead use the standard route mapping. So in your App_Start/RouteConfig.cs file:

routes.MapRoute(
    name: "Api",
    url: "api/{action}",
    defaults: new { controller = "Books" }
);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM