1

我的公司控制器中有身份验证功能

    [ActionName("Authenticate")]
    [HttpGet]
    public bool Authenticate(Company company)
    {
        if (Uow.Companies.AuthenticateCompany(company))            
            return true;                
        return false;
    }

使用以下 ajax 查询调用

$.ajax({ url: "/api/company/Authenticate", type: 'get', data: company })

公司是一个js对象

Company: function (name, phoneNumber, password) {
    this.Name = name;
    this.PhoneNumber = phoneNumber;
    this.password = password;
}

var company = new Company($('#TextBoxCompanyName').val(),'00000000', $('#TextBoxCompanyPassword').val());

我的api路线如下

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

当代码运行时,web api 调用公司控制器中的以下函数

 public Company Get(int id)
    {
        return Uow.Companies.GetById(id);
    }

如何调用自定义 get 函数?

4

1 回答 1

4

Web.API 尝试按定义顺序匹配路由。

来自Web API 路由和操作/路由和操作选择

框架尝试将 URI 路径中的段与模板匹配。模板中的文字必须完全匹配。占位符匹配任何值,除非您指定约束。该框架与 URI 的其他部分不匹配,例如主机名或查询参数。框架选择路由表中与 URI 匹配的第一个路由。

所以路线的定义顺序很重要。

你需要把你"Action" "DefaultApi"

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

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

否则,wep.api 会将您的 url 解释/api/company/Authenticate为 controller=company 和 id=Authenticate,因此它会路由到您的 Get 操作。

于 2013-01-28T20:59:23.410 回答