我正在使用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);
}
提前谢谢
答案 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]
等属性。