我正在使用microsoft asp.net身份教程示例应用[这里] [1],直到我对我的项目所需的功能感到满意为止。我需要一个API,我可以从一个单独的MVC Web应用程序调用来对本地sql服务器进行身份验证/授权,并将登录凭据从Web应用程序传递到api以获取标头令牌等。然后我需要能够检查令牌是否有任何请求提取数据或将数据保存回数据库。
我在该示例解决方案中添加了一个Web应用程序项目,该解决方案只是一个带有按钮的表单和一些用于捕获单击提交按钮的jquery:
$(document).ready(function () {
var register = function() {
var dataa = {
Email: "password@host.com",
Password: "password",
ConfirmPassword: "password"
};
$.ajax({
type: 'POST',
url: '/api/Account/Register',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(dataa)
});
return false;
}
$('#btnRegister').click(register);
});
然后这是api本身的控制器:
[Authorize]
[EnableCors("*","*","*")]
[RoutePrefix("api/Account")]
public class AccountController : ApiController
{
[AllowAnonymous]
[Route("Register")]
[HttpPost]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
if (!result.Succeeded)
{
return GetErrorResult(result);
}
return Ok();
}
}
当我尝试在api上调用Register函数时,我在浏览器中收到404错误(jquery-1.10.2.js:8720 POST http://localhost:35714/api/Account/Register 404(Not Found))。如何从前端点击api功能,可以从我的网络应用控制器进行此调用,还是应该是客户端?
添加了Microsoft.aspnet.cors和microsoft.aspnet.webapi.cors,将config.EnableCors()添加到webapiconfig.cs,将[EnableCors]添加到继承自apicontroller的accountcontroller。
答案 0 :(得分:0)
您需要在API方法中添加HttpPost属性:
[AllowAnonymous]
[Route("Register")]
[System.Web.Http.HttpPost]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
...
答案 1 :(得分:0)
试试这个。
$(document).ready(function () {
var register = function() {
var dataa = {
Email: "password@host.com",
Password: "password",
ConfirmPassword: "password"
};
$.ajax({
type: 'POST',
url: '/api/Account/Register',
contentType: 'application/json; charset=utf-8',
data: {model: JSON.stringify(dataa)}
});
return false;
}
$('#btnRegister').click(register);
});