WebAPI Url匹配问题

时间:2013-01-03 07:56:41

标签: asp.net-web-api attributerouting

我在我的web项目中实现了AttributeRouting和WebApi。 我尝试将http://localhost/apis/test?adminId=yyy之类的网址路由到GetSomeInfo动作。但是我遇到了一些麻烦,网址http://localhost/apis/testhttp://localhost/apis/test?adminId=yyy都转到了行动GetEntity。它似乎无法识别参数adminId,它认为url中没有参数。事实证明,转到GetEntity行动。谁能帮我?感谢。

到目前为止我所做的事情如下所示,它不起作用。

[RoutePrefix("apis/test")]
public class SampleController : ApiController
{


    [HttpGet]
    [GET("")]
    public string GetEntity([FromUri]string name = null, [FromUri]string id = null)
    {
        ....
    }

    [HttpGet]
    [GET("")]
    public string GetSomeInfo([FromUri]string adminId)
    {
        ....
    }

 }

被修改

global.asax中的路线图代码如下。我发现网址http://localhost/api/Sample?adminId=2BD48CF9-95EB-48D2-A1B2-1AFA273E586D可以路由到GetSomeInfo操作。没有任何参数的网址http://localhost/api/Sample路由到GetEntity。这正是我想要的。我的问题是为什么RoutePrefixFromUri不起作用?

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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


            routes.MapRoute(
               name: "Default",
               url: "{controller}/{action}/{id}",
               defaults: new { controller = "Login", action = "Login", id = UrlParameter.Optional }
           );

1 个答案:

答案 0 :(得分:1)

因为,您需要在global.asax.cs中定义更多路由。看到这个,Single controller with multiple GET methods in ASP.NET Web API