Web API操作名称

时间:2012-05-09 15:45:03

标签: asp.net-mvc-4 asp.net-web-api

我正在使用ASP.NET Web API,我有以下内容:

public Guid GetLogon(string username, string password)
{
    return new X.Authentication().Logon(username, password);
}

public void PostLogoff(Guid sessionId)
{
    new X.Authentication().Logoff(sessionId);
}

这是从客户端调用的,如下所示:

$(document).ready(function () {
    logon("MyUsername", "MyPassword", function (guid) {
        $("#sessionId").html(guid);

        logoff($("#sessionId").html(), function () {
            //Logged out action here
        });
    });        
});

这一切都有效,但我不喜欢使用http动词为Action名称添加前缀,例如GetLogon或PostLogoff。有没有办法让它们只是登录和注销?

我尝试了以下操作,但没有效果:

[System.Web.Mvc.AcceptVerbs(HttpVerbs.Get)]
public Guid Logon(string username, string password)
{
    return new X.Authentication().Logon(username, password);
}

[System.Web.Mvc.AcceptVerbs(HttpVerbs.Post)]
public void Logoff(Guid sessionId)
{
    new X.Authentication().Logoff(sessionId);
}

提前谢谢

2 个答案:

答案 0 :(得分:2)

不确定这是否是原因,但在我的APIController中,AcceptVerbs属性位于不同的命名空间中:

System.Web.Http.AcceptVerbs

[HttpGet][HttpPost]属性位于同一名称空间

我在同一个项目中有许多常规的MVC控制器;他们使用您上面描述的命名空间,但不使用API​​控制器

试试这个:

[System.Web.Http.AcceptVerbs("GET")]
public Guid Logon(string username, string password)
{
    return new X.Authentication().Logon(username, password);
}

[System.Web.Http.AcceptVerbs("POST")]
public void Logoff(Guid sessionId)
{
    new X.Authentication().Logoff(sessionId);
}

答案 1 :(得分:0)

如果您使用Get,Post,Put或Delete 启动操作名称,ASP.NET Web API将尝试猜测该方法。例如:

public void DeleteItem(int id)
{
    ...
}

工作和系统是否会发现它将由DELETE触发。

作为向后兼容性,支持[HttpGet]等属性。