[HttpPost]
public HttpResponseMessage<Response> Login(string username, string password) { ... }
我想知道以下WebAPI方法。如何将参数传递给方法?我假设那些不是POST数据。由于该方法在我从网络表单发送数据时没有响应。
<form action="/api/Authenticate/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>
答案 0 :(得分:0)
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 }
);
应该成为:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
您将向/api/somecontroller/login
发送POST请求。
如果你想遵守惯例,你将拥有以下内容:
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>