gpt4 book ai didi

http-status-code-404 - 如何用实际的 404 状态代码响应替换 Blazor 默认值 "soft 404"

转载 作者:行者123 更新时间:2023-12-04 13:57:02 30 4
gpt4 key购买 nike

404 的默认 Blazor 方法是在 App.razor 中创建一个软 404,但我想坚持搜索引擎最佳实践,在 Azure 上显示 404 页面时实际返回 404 状态代码。

我试图删除 App.razor 中的元素以查看是否可以强制执行 404,但是,该元素无法编译。

有什么建议?

最佳答案

在 Blazor WebAssembly 应用程序(ASP.Net Core 托管)模板中使用服务器端预渲染时,我能够返回 404 http 状态代码

当我将浏览器指向 http://localhost/fetchdata 时它返回了一个页面。我希望它返回 404 状态代码作为示例。这可以使用依赖注入(inject)和 stub 类来实现。

BlazorApp1.Client 我添加了一个 IResponse.cs 文件:

namespace BlazorApp1.Client {
public interface IResponse {
void SetNotFound();
}
}

在 BlazorApp1.Client 我添加了一个 ResponseStub.cs 文件:
namespace BlazorApp1.Client {
public class ResponseStub : IResponse {
public void SetNotFound() {
// Do nothing if we are browser side
}
}
}

在 BlazorApp1.Client 中的 FetchData.razor 中,我添加了:
@inject BlazorApp1.Client.IResponse Response

并在代码部分:
protected override void OnInitialized() {
Response.SetNotFound();
}

在 BlazorApp1.Client 的 Program.cs 中,我添加了:
builder.Services.AddScoped<IResponse, ResponseStub>();

然后在 BlazorApp1.Server ,在 Startup.cs 中,我在 ConfigureServices 下添加:
services.AddHttpContextAccessor();
services.AddScoped<IResponse, Response>();

在配置下我替换了:
endpoints.MapFallbackToFile("index.html");

和:
endpoints.MapFallbackToPage("/_Host");

然后在 Response.cs 中创建 IResponse 的 Server 实现:
using BlazorApp1.Client;
using Microsoft.AspNetCore.Http;
using System.Net;

namespace BlazorApp1.Server {
public class Response : IResponse {
private readonly IHttpContextAccessor _httpContextAccessor;

public Response(IHttpContextAccessor accessor) {
_httpContextAccessor = accessor;
}

public void SetNotFound() {
_httpContextAccessor.HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound;
}
}
}

最后我在 BlazorApp1.Server/Pages 中创建了一个 _Host.cshtml 文件:
@page "/fallback"
@namespace BlazorPrerendering.Server.Pages
@using BlazorApp1.Client
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
Layout = "_Layout";
}
<app>
<component type="typeof(App)" render-mode="ServerPrerendered" />
</app>
<div id="blazor-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>
<script src="_framework/blazor.webassembly.js"></script>

警告
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-context?view=aspnetcore-3.1是否声明:

Additionally, again for security reasons, you must not use IHttpContextAccessor within Blazor apps. Blazor apps run outside of the context of the ASP.NET Core pipeline and the HttpContext isn't guaranteed to be available within the IHttpContextAccessor, nor it is guaranteed to be holding the context that started the Blazor app.



这就是为什么我限制了这个服务器端预渲染的 Blazor 和 OnInitialized(也应该在 OnInitializedAsync 上工作)。

关于http-status-code-404 - 如何用实际的 404 状态代码响应替换 Blazor 默认值 "soft 404",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60239939/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com