如何为 WebApiConfig 配置路由以将某些请求重定向到静态 html 页面
本文关键字:重定向 请求 静态 页面 html WebApiConfig 配置 路由 | 更新日期: 2023-09-27 18:33:55
>我正在开发一个webApi应用程序,我想得到的api如下:
- API/v1/lists/?params...
- api/v1/meta/?params...
- API/v1/debug
有些 ApiController 适用于"列表"和"元"路由,但api/v1/debug
应该返回静态 html 页面。
我可以想到两种实现它的方法:
- 通过特殊的控制器返回类似
View("mypage.html")
或 - 在 WebApiConfig 中配置路由以将请求(如
api/v1/debug
)重定向到mypage.html
但是,我无法获得任何这些方式的工作版本:没有像HtmlContent
或类似HttpResponseMessage
的内容类型,所以我不能像 smth 一样
config.Routes.MapHttpRoute(
name: "Debug",
routeTemplate: "api/v1/debug/",
defaults: new { controller = "Debug" }
);
。
public class DebugController:ApiController
{
public HttpResponseMessage Get()
{
return new HttpResponseMessage()
{
Content = new HtmlContent("mypage.html");
};
}
}
我无法在 WebApiConfig 中获得正确的重定向:
//this results into 400 status code:
config.Routes.MapHttpRoute("Default", "api/v1/debug/", "~/mypage.html");
你能告诉我这个问题的正确解决方案是什么吗?是否可以将静态 html 页面与 WebApi 应用程序中的操作结果相结合?
最好的选择是使用 MVC
来呈现 html 页面。WebAPI 和 MVC 可以共存。请注意,它们使用不同的路由类型。
作为快速技巧(使用 WebAPI),您可以读取文件并将其内容写入HttpResponseMessage
如下所示:
// this is a controller method
public HttpResponseMessage CreateResponseFromFile()
{
var content = File.ReadAllText("yourfile.html");
if (content == null)
throw new HttpResponseException(HttpStatusCode.NoContent);
var response = new HttpResponseMessage
{
Content = new StringContent(content)
};
response.Content.Headers.Add("Content-Type", " text/html"); // note this line to set content type
return response;
}
好吧,我找到了另一种方法来获得我想要的东西,所以我就把它留在这里,以防它可以帮助某人。
一种可以帮助遵循一般路由规则的肮脏黑客是在web.config
中添加以下部分:
<configuration>
<system.web>
<urlMappings enabled="true">
<add url="~/api/v1/debug/" mappedUrl="~/mypage.html" />
</urlMappings>
</system.web>
</configuration>