Asp.net mvc 在asp.net MVC web api中调用自定义函数

Asp.net mvc 在asp.net MVC web api中调用自定义函数,asp.net-mvc,asp.net-web-api,Asp.net Mvc,Asp.net Web Api,我在公司控制器中具有身份验证功能 [ActionName("Authenticate")] [HttpGet] public bool Authenticate(Company company) { if (Uow.Companies.AuthenticateCompany(company)) return true; return false;

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

    [ActionName("Authenticate")]
    [HttpGet]
    public bool Authenticate(Company company)
    {
        if (Uow.Companies.AuthenticateCompany(company))            
            return true;                
        return false;
    }
 public Company Get(int id)
    {
        return Uow.Companies.GetById(id);
    }
这是使用以下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调用公司控制器中的以下函数

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

如何调用自定义get函数?

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

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

因此,路线定义的顺序很重要

您需要将您的
“操作”
放在
“DefaultApi”


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

Web.api尝试按照定义顺序匹配路由

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

因此,路线定义的顺序很重要

您需要将您的
“操作”
放在
“DefaultApi”


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

JS(
$.ajax
)代码中的
公司是什么?@Carlosfiguera进行了更新路由顺序很重要。如果您有多条路由,那么
“操作”
应该先出现,然后是默认路由。JS(
$.ajax
)代码中的
公司
是什么?@carlosfiguera进行了更新路由顺序很重要。如果您有多条路由,那么
“操作”
应该首先出现,然后是默认路由。谢谢,公司数据没有通过此路由发送。你知道为什么吗?如果是
GET
请求和复杂类型,如
Company
,你需要用
FromUriAttribute
public bool Authenticate([FromUri]Company>){
更多信息:谢谢,公司数据没有被发送。你知道为什么吗?在
GET
请求和复杂类型,如
company
的情况下,你需要用
FromUriAttribute
注释你的参数:
public bool Authenticate([FromUri]company){
更多信息: