These days I am handling 404 Not Found by Asp.Net Core .
As we know, there are several ways to achieve this: app.UseStatusCodePagesWithRedirects/app.UseStatusCodePagesWithReExecute/app.UseStatusCodePages .
I have to choose the app.UseStatusCodePages for I need to localizer the page by URL.
For example:
https://www.microsoft.com/en-us/microsoft-365/
The 'en-us' in URL just for deciding the language of the page.
Here is my code in 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);
});Now it works.
However, after I input a URL which does not exist. The header shows a 302 status code in the Network of Chrome DevTools but not a 404 status code.
Well, when I input the URL(https://www.microsoft.com/en-us/123.html), the header shows a right 404 status code in the Network of Chrome DevTools.
I searched about this on Google. Someone said I should add a ProducesResponseType in the controller, just like this:
public class OthersController : Controller
{
[Route("{culture=en}/Error/{code:int}")]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public IActionResult Error(int code)
{
return View(code);
}
}Well, it doesn't work any. I want to solve this because of SEO.
How can I solve this? Thank you.