如何为 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 页面。

我可以想到两种实现它的方法:

  1. 通过特殊的控制器返回类似 View("mypage.html")
  2. 在 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 应用程序中的操作结果相结合?

如何为 WebApiConfig 配置路由以将某些请求重定向到静态 html 页面

最好的选择是使用 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>