У меня есть API-контроллер в приложении ASP.NET Core следующим образом.Неверный URL API в ASP.NET Core
[Route("api")]
public class UserController : Controller
{
[HttpGet("{userName}/product_info")]
public IActionResult GetProductInfo(string userName)
{
List<ProductInfo> productInfos = _repo.GetProductInfoByUserName(userName);
if (productInfos.Count > 0)
return Ok(productInfos);
else
return BadRequest("Unable to process requrest");
}
}
Я могу позвонить выше API, используя /api/{username}/product_info
. Я использую UseStatusCodePagesWithRedirects()
для перенаправления на страницу 404, когда пользователь вводит неправильный URL-адрес. Проблема здесь в том, что когда я использую неправильный URL-адрес API, такой как /api/{username}/product_o
. Он перенаправляет на страницу 404 и возвращает код состояния 200. Я использую этот API с angular.js. Поскольку API возвращает 404 страницы на неверный URL с кодом состояния 200, функция ошибки then
метода $http
никогда не вызывается и в response.data
Я получаю HTML-код 404 страницы. Как вернуть код статуса 404, когда вызывается неправильный URL API и возвращает нормальную страницу 404, когда вызывается неправильный URL-адрес NON API? Ниже приведен снимок экрана о том, что я получаю, когда я вызываю неправильный URL API.
основа @Daboul предложения и решения на this link Добавления следующей части в configure
методе startup.cs
работ.
Func<HttpContext, bool> isApiRequest = (HttpContext context) => context.Request.Path.ToString().Contains("/api/");
app.UseWhen(context => !isApiRequest(context), appBuilder =>
{
appBuilder.UseStatusCodePagesWithRedirects("~/Error/{0}");
});
Я новичок в angular.js, поэтому я не могу много сделать на стороне javascript. На стороне ASP.NET какое промежуточное ПО следует использовать, чтобы исключить использование контроллера API из StatusCodePages? Эта проблема также возникает, когда я добавляю атрибут Authorize для контроллера API. После добавления атрибута 'Authorize', когда я пытаюсь получить доступ к API без входа, он возвращает страницу входа с кодом состояния 200. Из-за этого мне пришлось удалить атрибут «Авторизовать». –
UseWhen() выполнит эту работу. Пример можно найти здесь, например: http://stackoverflow.com/questions/37841270/branching-asp-net-core-pipeline-authentication Использование UseWhen() в соединении с условием на URL 'context.Request.Path .StartsWithSegments ("/ API /") ' – Daboul
В вашей версии Update1' app.UseWhen (context =>! IsApiRequest (context), appBuilder => { app.UseStatusCodePagesWithRedirects ("~/Error/{0}"); }); 'должно быть' app.UseWhen (context =>! IsApiRequest (контекст), appBuilder => { appBuilder.UseStatusCodePagesWithRedirects ("~/Error/{0}"); }); 'switch app for AppBuilder. – Daboul