2

我正在使用 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 动词,如 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);
}

先感谢您

4

2 回答 2

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);
}
于 2012-05-09T16:08:21.953 回答
0

如果您以 Get、Post、Put 或 Delete开始操作名称, ASP.NET Web API 将尝试猜测方法。例如:

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

将起作用,系统将发现它将由 DELETE 触发。

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

于 2012-05-09T16:12:32.453 回答