У меня есть приложение, написанное с использованием C#
поверх ASP.NET Core 2.2.Я создал контроллер, который отвечает на запрос PATCH
с именем Update
.Вот мой контроллер
[Route("api/[controller]"), ApiController, Produces("application/json")]
public class CategoriesController : ControllerBase
{
[HttpPatch("{propertyId}/{listId}/{isOn}"), Authorize]
public ActionResult<bool> Update(int propertyId, int listId, bool isOn)
{
// Do something
return true;
}
}
также, чтобы вернуть ошибку 401, когда пользователь не авторизован вместо перенаправления, я добавил следующий код в мой Startup
class
services.ConfigureApplicationCookie(config =>
{
config.Events = new CookieAuthenticationEvents
{
OnRedirectToLogin = ctx =>
{
if (ctx.Request.Path.StartsWithSegments("/api", StringComparison.CurrentCultureIgnoreCase))
{
ctx.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
}
else
{
ctx.Response.Redirect(ctx.RedirectUri);
}
return Task.FromResult(0);
}
};
});
Теперь, чтобы вызвать этот API с помощью jQuery
, я сделал следующее
$('.update-property').click(function (e) {
e.preventDefault();
var obj = $(this);
$.ajax({
url: '/api/Categories/Update',
type: 'PATCH',
data: {
'propertyId': obj.data('property-id'),
'listId': obj.data('list-id'),
'isOn': obj.data('is-on') === 'True' ? 'false' : 'true'
},
success: function (response) {
console.log(response);
// if response unauthorized, redirect to the login page with the ReturnUrl
// else if response.data is true then change the icon
}
});
});
Но этот запрос продолжает возвращать код ошибки http 404.Я проверил этот вопрос в инструментах разработчика и вижу, что параметр задан правильно, а URL действителен.
Как правильно обработать этот запрос PATCH?