是否可以在不使用asp.net标识的情况下验证Web API?
我在同一个解决方案中有一个MVC和一个Web API项目,在MVC项目上我有一个非常小的管理区域,用登录名和密码保护(仅供一个用户使用)。在这个区域,我使用API调用获取clinet端的数据。
这是我的登录功能:
public ActionResult SubmitLogin(string UserName, string Password)
{
if (ModelState.IsValid)
{
if (UserName == "xxxxx" && Password == "yyyyy")
{
FormsAuthentication.SetAuthCookie(UserName, true);
return RedirectToAction("Index", @"Admin/Users");
}
}
var errors = (from value in ModelState.Values
from error in value.Errors
select error.ErrorMessage).ToList();
if (errors.Count == 0)
{
errors.Add("UserName or Password are incorrect");
}
ViewBag.Message = errors;
return View("Index");
}
登录表单工作正常,我的问题是API调用,我的API控制器是[Authorize]
但是当我提出请求时:
self.getUsers = function (callback) {
$.get("../MySite.API/Users/GetUsers/", callback);
}
我收到401错误。
我知道我必须以某种方式发送AuthCookie
,但我不确定如何。
任何帮助都将不胜感激。
答案 0 :(得分:0)
您可以创建自己的AuthorizationFilter
或ActionFilter
,以便在执行操作之前检查用户的身份验证和授权。
这只是使用ActionFilter
完成工作的示例。您可以根据需要设计自己的:
public class CanEditReport : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var reportID = Convert.ToInt32(filterContext.ActionParameters["id"]);
var report = ReportsManager.GetByID(reportID);
int userID = 0;
bool hasID = int.TryParse(filterContext.HttpContext.Session["CurrentUserID"].ToString(), out userID);
if (!hasID)
{
filterContext.Controller.TempData["FlashMessage"] = "Please select a valid User to access their reports.";
//Change the Result to point back to Home/Index
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Index" }));
}
else //We have selected a valid user
{
if(report.UserID != userID)
{
filterContext.Controller.TempData["FlashMessage"] = "You cannot view Reports you have not created.";
//Change the Result to point back to Home/Index
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Index" }));
}
}
base.OnActionExecuting(filterContext);
}
}