- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Blazor WebAssembly 解决方案,其中包含一个基于 Microsoft 的默认解决方案模板的客户端项目、服务器项目和共享项目。我正在使用 Google Chrome 在 Visual Studio 2019 预览版中进行编辑和调试。
该解决方案开箱即用,只有一个启动项目,即服务器应用程序。该服务器应用程序具有对客户端应用程序的项目引用。您可以通过在服务器项目属性中选中“启用 SSL”来将其设置为使用 HTTPS,我已经这样做了。
当您单击调试时,它可以完美运行。
现在我想更改它,以便 Blazor WASM 应用程序仅响应来自 https://localhost:44331 的请求而不是对 https://localhost:44331/api 的请求.这些请求应该由服务器应用程序的 API Controller 端点处理。所以,如果有人访问 https://localhost:44331/api/something ,并且不存在这样的 API 端点,它们应该从 API 收到 404 错误代码,并且不会被路由到通常的 Blazor 页面,并说“抱歉,此地址没有任何内容”。
我想使用 URL 的这个额外的“/api”部分来保持对 API 的请求与对页面的请求分开。我认为这将更接近生产中的正常设置。我希望很清楚我要做什么。
这是一个带有路由属性的示例 Controller 声明:
namespace BlazorApp2.Server.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class WeatherForecastController : ControllerBase
{
// Etc.
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
//etc.
}
///etc.
}
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Etc.
app.UseStatusCodePages();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
// The line commented out below is the out-of-the-box behaviour for a Blazor WASM app with ASP NET Core API. This is the line I want to replace.
// endpoints.MapFallbackToFile("index.html");
// The line below is my (failed) attempt to get the behaviour I want.
endpoints.MapFallback(HandleFallback);
});
}
private async Task HandleFallback(HttpContext context)
{
var apiPathSegment = new PathString("/api"); // Find out from the request URL if this is a request to the API or just a web page on the Blazor WASM app.
bool isApiRequest = context.Request.Path.StartsWithSegments(apiPathSegment);
if (!isApiRequest)
{
context.Response.Redirect("index.html"); // This is a request for a web page so just do the normal out-of-the-box behaviour.
}
else
{
context.Response.StatusCode = StatusCodes.Status404NotFound; // This request had nothing to do with the Blazor app. This is just an API call that went wrong.
}
}
最佳答案
回顾一下这个问题,当有人提出请求时:
https://yourapp.com/api/someendpoint
和
/api/someendpoint
找不到,他们被带到一个 Blazor 页面。这种默认行为很奇怪。对于以
/api
开头的请求,他们期待一个 HTTP 状态代码,也可能是一个 JSON 对象,但相反,他们得到了 HTML。也许他们甚至不使用您的应用程序。也许他们甚至不是人(更有可能他们是一个软件)。
[Route("api/[controller]")]
public class SampleController : ControllerBase
{
// ...
}
在 Startup.cs 中:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.Map("api/{**slug}", HandleApiFallback);
endpoints.MapFallbackToFile("{**slug}", "index.html");
});
}
private Task HandleApiFallback(HttpContext context)
{
context.Response.StatusCode = StatusCodes.Status404NotFound;
return Task.CompletedTask;
}
关于asp.net-core - 如何在 ASP .NET Core Web API 中映射回退,以便 Blazor WASM 应用程序仅拦截不发送到 API 的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61268117/
我是一名优秀的程序员,十分优秀!