在我的應用程式中,我有 3 組具有 3 種路由模式的頁面。
- 路徑后有一個 url 部分的頁面,例如:
{域名}/en/about-us/
@page 之后這些頁面頂部沒有路由引數。
- 路徑后有兩個 url 部分的頁面,例如:
{domain}/en/product/{永久鏈接}/
在 @page 之后,此頁面頂部有一個 id 作為路由引數。
@page "{id}/"
- 路徑后有 3 個 url 部分的頁面,例如:
{domain}/en/{category-permalink1}/{subcategory-permalink2}/{subsubcategory-permalink3}/
此頁面頂部的引數如下所示:
@page "/{maincat}/{subcat?}/{subsubcat?}/"
一切正常,但是當另一部分添加到 URL 時,它不會重定向到未找到的頁面。
問題是我可以在哪里處理這個重定向?
正如我試圖做的那樣:
public class RouteValueRequestCultureProvider : IRequestCultureProvider
{
private readonly CultureInfo[] _cultures;
public RouteValueRequestCultureProvider(CultureInfo[] cultures)
{
_cultures = cultures;
}
/// <summary>
/// get {culture} route value from path string,
/// </summary>
/// <param name="httpContext"></param>
/// <returns>ProviderCultureResult depends on path {culture} route parameter, or default culture</returns>
public Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
{
var defaultCulture = "en";
var path = httpContext.Request.Path;
var routeValues = httpContext.Request.Path.Value.Split('/');
var pathParts = routeValues.Where(p => !string.IsNullOrEmpty(p)).ToArray();
if (pathParts.Length > 4)
{
httpContext.Response.StatusCode = 404;
httpContext.Response.Redirect("/en/not-found/", true);
}
return Task.FromResult(new ProviderCultureResult(routeValues[1]));
}
}
但是對于超過 4 個部分的 URL,例如:
{domain}/{language_code}/{part2}/{part3}/{part4}/{part5}
重定向到具有 404 狀態頁面的頁面,該頁面不是應用程式處理的 404 頁面。

uj5u.com熱心網友回復:
這是類似問題的答案:鏈接
app.Use(async (ctx, next) =>
{
await next();
if(ctx.Response.StatusCode == 404 && !ctx.Response.HasStarted)
{
//Re-execute the request so the user gets the error page
string originalPath = ctx.Request.Path.Value;
ctx.Items["originalPath"] = originalPath;
ctx.Request.Path = "/error/404";
await next();
}
});
app.UseEndpoints確保在原始答案中提到之前添加此內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/505690.html
