Сейчас я обрабатываю 404 Not Found by Asp. Net Core.
Как мы знаем, есть несколько способов добиться этого: app.UseStatusCodePagesWithRedirects / app.UseStatusCodePagesWithReExecute / app.UseStatusCodePages .
Мне нужно выбрать app.UseStatusCodePages, поскольку мне нужно локализовать страницу по URL-адресу.
Например:
https://www.microsoft.com/en-us/microsoft-365/
'en-us' в URL-адресе только для выбора языка страницы.
Вот мой код в startup.cs
app.UseStatusCodePages(async context =>
{
string currentCulture = "";
if (context.HttpContext.Request.Path.Value.Split('/').Length < 2)
{
currentCulture = "en";
}
else
{
string LanguageGet = context.HttpContext.Request.Path.Value.Split('/')[1];
currentCulture = SupportedCultures.Find(X => X.Name == LanguageGet) == null ? "en" : SupportedCultures.Find(X => X.Name == LanguageGet).Name;
}
var redirectPath = "/" + currentCulture + "/Error/" + context.HttpContext.Response.StatusCode;
context.HttpContext.Response.Redirect(redirectPath);
});
Теперь он работает.
Однако после ввода URL-адреса (localhost: 4387 / en / 123. html), которого не существует. В заголовке отображается код состояния 302 в сети Chrome DevTools, но не код состояния 404.
Ну, когда я ввожу URL (https://www.microsoft.com/en-us/123.html), которого не существует, заголовок показывает правильный код состояния 404 в сети Chrome DevTools. Это как раз тот код статуса, который мне нужен.
Я искал об этом в Google. Кто-то сказал, что я должен добавить в контроллер ProducesResponseType, вот так:
public class OthersController : Controller
{
[Route("{culture=en}/Error/{code:int}")]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public IActionResult Error(int code)
{
return View(code);
}
}
Ну, это не работает. Я хочу решить эту проблему из-за SEO.
Вот все исходные коды этого примера проекта в onedrive: https://1drv.ms/u/s! AtcqjirAlaGYiuUyWqy8gzpgPF9U1Q? E = 8WTYln
Как я могу решить это? Спасибо.