How to use the same route with different parameter

2019-06-26 11:24发布

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条回答
等我变得足够好
2楼-- · 2019-06-26 11:48

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 ?

查看更多
登录 后发表回答