控制器中自定义方法的Web Api路由

时间:2012-09-23 11:42:07

标签: c# routing asp.net-web-api

我最近选择了ASP.NET Web API,虽然我已经破解了授权和身份验证,但我无法破解路由。这是一场噩梦!

我使用Authenticate()创建了AuthenticationController方法。我将[HttpGet]属性添加到Authenticate()但是每当我点击API时,我都会得到404

这是我当前的WebApiConfig: -

public static void Register(HttpConfiguration config)
{
     config.Routes.MapHttpRoute("DefaultApiWithId", "{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" });
     config.Routes.MapHttpRoute("DefaultApiWithAction", "{controller}/{action}");
     config.Routes.MapHttpRoute("DefaultApiGet", "{controller}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
     config.Routes.MapHttpRoute("DefaultApiPost", "{controller}", new { action = "Post" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) });
}

我正在尝试的地址是:/authentication

控制器如下所示: -

[BasicHttpAuthorize(RequireAuthentication = true)]
public class AuthenticationController : ApiController
{
     [HttpGet]
      public string Authenticate(string email, string password, string agent, string ip)
      {

      }
}

有人能指引我朝正确的方向走吗?我试过点击多个地址/端点: -

  • /authentication/authenticate
  • /authentication/
  • /authentication

1 个答案:

答案 0 :(得分:1)

根据我的评论:

为什么你有4条路线?我不确定你要完全准确地实现什么,但你最有可能只用顶级(默认)路线来实现它。如果您删除或注释掉最后3条路线,并且您正在使用web api,则执行GET时应该点击您的Authenticate方法