У меня есть этот атрибут:
public class ValidateCertAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext context)
{
// Read certificate from the HTTP Request and
// check its various attributes against known
// values from a config file.
if (true) // certificate is invalid
{
context.Response = new HttpResponseMessage(HttpStatusCode.Forbidden)
{
ReasonPhrase = "Invalid certificate"
};
}
else
{
base.OnAuthorization(context);
}
}
}
и это действие:
[HttpGet]
[Route("TestAuth")]
[ValidateCert]
public HttpResponseMessage TestAuth()
{
return new HttpResponseMessage(HttpStatusCode.OK)
{
ReasonPhrase = "In Test method without any authorization."
};
}
Это действие находится внутри контроллера .NET Core Web Api:
[ApiController]
public class TestAuthController : ControllerBase
С другой стороны, Startup.cs содержит:
app.UseMvc();
так что это кажется странным, поскольку это должен быть просто контроллер Web Api, а не веб-приложение MVC. Хотя, видимо, это только для маршрутизации, но я подумал, что это стоит упомянуть.
Я установил точку останова в первой строке кода атрибута, но она не сработала. Я считаю, что он должен получить удар до того, как действие будет выполнено, и что действие никогда не должно выполняться, потому что я устанавливаю ответ внутри атрибута. Почему атрибут не выполняется?
AuthorizeAttribute
и убедитесь, что он находится в пространстве именSystem.Web.Http
. - person JuanR   schedule 15.05.2019