Asp.net mvc 4 MVC4如何调用以下控制方法? [HttpPost] 公共HttpResponseMessage登录(字符串用户名、字符串密码){…}

Asp.net mvc 4 MVC4如何调用以下控制方法? [HttpPost] 公共HttpResponseMessage登录(字符串用户名、字符串密码){…},asp.net-mvc-4,Asp.net Mvc 4,我想知道下面的WebAPI方法。如何将参数传递到方法中?我想这些不是POST数据。因为当我从web表单发送post数据时,该方法没有响应 [HttpPost] public HttpResponseMessage<Response> Login(string username, string password) { ... } 用户数据: 用户名 暗语 登录 Web API方法不打算用作HTML表单的操作,因为它们通常不返回HTML。它们旨在从常规ASP.NET

我想知道下面的WebAPI方法。如何将参数传递到方法中?我想这些不是POST数据。因为当我从web表单发送post数据时,该方法没有响应

[HttpPost]
        public HttpResponseMessage<Response> Login(string username, string password) { ... }

用户数据:
用户名
暗语
登录

Web API方法不打算用作HTML表单的操作,因为它们通常不返回HTML。它们旨在从常规ASP.NET MVC控制器中使用。因此,尽管您可以使用POST谓词调用此方法,并将这两个参数作为POST请求体的一部分传递,但这取决于您配置的媒体类型是XML还是JSON。另一种可能是使用客户端javascript AJAX调用调用此方法。另一个需要考虑的是非标准方法的名称:
Login
。如果希望能够调用它,则需要修改应用程序创建的默认路由,并将
{action}
标记包含到路由中

因此:

应成为:

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
您将向
/api/somecontroller/login
发送POST请求

如果你想坚持传统,你将有以下几点:

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
公共类登录控制器:ApiController
{
//POST/api/login
公共HttpResponseMessage帖子(字符串用户名、字符串密码)
{
...
}
}
然后:

public class LoginController : ApiController
{
    // POST /api/login
    public HttpResponseMessage<Response> Post(string username, string password)
    {
        ...
    }
}

用户数据:
用户名
暗语
登录

是的,但我只是想在webAPI中尝试post方法,我找不到比使用web表单更好的方法来尝试。好的,那么您可以使用web表单。只需确保您有正确的路由设置,这将导致此非常规操作名
登录
。或者坚持约定。
操作
应该是
/api/authenicate/login
,控制器中的方法名称应该是
login
?是的,如果您的控制器被调用
AuthenticateController
并且操作被调用
login
,并且您已经修改了路由以包含
{action}
令牌,如我的回答所示。
public class LoginController : ApiController
{
    // POST /api/login
    public HttpResponseMessage<Response> Post(string username, string password)
    {
        ...
    }
}
<form action="/api/login" id="loginForm" method="post">
    <fieldset>
    <legend>Userdata:</legend>
        <label for="username">Username</label>
        <input id="username" name="username" type="text" value="" />
        <label for="password">Password</label>
        <input id="password" name="password" type="password" value="" />
        <button type="submit">Login</button>
    </fieldset>
</form>