Методы 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 }
);
и вы будете отправлять запрос POST на /api/somecontroller/login
.
И если вы хотите придерживаться конвенций вы будете иметь следующее:
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>
Да, но я просто хотел бы попробовать метод пост в WebAPI, Я не мог найти лучшего способа попробовать, чем использовать веб-форму. – starcorn
Хорошо, тогда вы можете использовать веб-форму. Просто убедитесь, что у вас есть правильная настройка маршрута, которая приведет к этому * нетрадиционному * имени действия 'Login'. Или придерживаться условностей. –
Должно ли 'action' быть'/api/authenicate/login' и имя метода в контроллере должно быть 'login'? – starcorn