Я хочу создать атрибут, который позволяет указать, каким группам разрешено выполнять этот API.Во-первых, мне нужно проверить, является ли пользователь членом этой группы, и если нет, ограничить этого пользователя, показывая ошибку 401.
Я упоминал об этом, но это мне не сильно помогло. Как получить имя аутентифицированного пользователя, IP-адрес и действие контроллера, вызываемое из фильтра HTTP?
https://www.c -sharpcorner.com / article / filters-in-Asp-Net-mvc-5-0-part-двенадцать /
Вот мой код
namespace ApiSample.Filters
{
public class AuthorizationRequiredAttribute : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
if (true == false)
{
actionContext.Response =
CreateHttpResponseMessage(HttpStatusCode.Unauthorized, "error",
"You are not authorized to view this page.");
}
}
/// <summary>
/// Overrides the default HTTP response and data that is sent back on an unauthorized request
/// </summary>
/// <param name="ctx"></param>
protected override void HandleUnauthorizedRequest(HttpActionContext ctx)
{
ctx.Response = CreateHttpResponseMessage(HttpStatusCode.Unauthorized, "error",
"Authentication is required for this operation");
}
public static HttpResponseMessage CreateHttpResponseMessage(HttpStatusCode httpStatusCode)
{
var httpResponseMessage = new HttpResponseMessage
{
StatusCode = httpStatusCode
};
return httpResponseMessage;
}
public static HttpResponseMessage CreateHttpResponseMessage(HttpStatusCode httpStatusCode, string messageKey, string messageValue)
{
var httpResponseMessage = new HttpResponseMessage
{
StatusCode = httpStatusCode
};
if (!string.IsNullOrWhiteSpace(messageKey) && !string.IsNullOrWhiteSpace(messageValue))
{
httpResponseMessage.Content =
new StringContent("{\"" + messageKey + "\":\"" + messageValue.Replace("\"", "\\\"") + "\"}",
Encoding.UTF8, "application/json");
}
return httpResponseMessage;
}
}
}
namespace ApiSample.Filters
{открытый класс FilterThis: ActionFilterAttribute {
public override void OnActionExecuting(HttpActionContext filterContext)
{
//custom authentication logic
filterContext.Response = filterContext.Request.CreateResponse(HttpStatusCode.Unauthorized,
new { Code = 401, Message = "Unable to access, Please login again" });
base.OnActionExecuting(filterContext);
}
}
}
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[FilterThis]
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}