How to use the same route with different parameter

2019-06-26 10:55发布

问题:

I have an Api controller with two different actions that take different parameter types.

    // GET: users/sample%40email.com
    [Route("users/{emailAddress}")]
    public IHttpActionResult GetUser(string emailAddress)

    // GET: users/1D8F6B90-9BD9-4CDD-BABB-372242AD9960
    [Route("users/{reference}")]
    public IHttpActionResult GetUserByReference(Guid reference)

Problem is multiple actions are found matching when I make a request to either. Looking at other answers I thought I needed to setup routes in the WebApiConfig like so...

            config.Routes.MapHttpRoute(
            name: "apiEmail",
            routeTemplate: "api/{controller}/{action}/{email}"
            );

        config.Routes.MapHttpRoute(
            name: "apiReference",
            routeTemplate: "api/{controller}/{action}/{reference}"
            );

What do I need to do so that each action is called based on the parameter type I pass in?

I'm very new to Web.Api any additional explanation text would be appreciated.

回答1:

You do like below method declaration with attribute routing enabled: //declare method with guid 1st

// GET: users/1D8F6B90-9BD9-4CDD-BABB-372242AD9960
[Route("users/{reference:guid}")]
public IHttpActionResult GetUserByReference(Guid reference)

and declare other method like below

// GET: users/sample%40email.com
[Route("users/{emailAddress}")]
public IHttpActionResult GetUser(string emailAddress)

Please let me know, is this work for you ?