【问题标题】:How can I configure a route for WebApiConfig to redirect some requests to static html page?如何为 WebApiConfig 配置路由以将某些请求重定向到静态 html 页面?
【发布时间】:2014-12-10 16:38:04
【问题描述】:

我在做一个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

但是,我无法获得任何这些方式的工作版本:HttpResponseMessage 没有像 HtmlContent 或类似的内容类型,所以我不能这样做

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");

您能告诉我这个问题的正确解决方案是什么吗? 是否可以在 WebApi 应用程序中将静态 html 页面与 Action Results 结合起来?

【问题讨论】:

  • 我认为 HtmlContent 需要 HTML 文本,而不是文件。您可以使用流式阅读器读取文件,然后返回内容...我不知道有什么可以像您期望的那样直接返回 HTML 内容...但我不是 Web API 专家。
  • @BrianMains,感谢您的评论,但正如我所提到的,根本没有 HtmlContent 这样的类,我只是为了展示我想要得到的理想:)

标签: c# asp.net asp.net-web-api2


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    嗯,我找到了另一种方法来获得我想要的东西,所以我就把它留在这里以防它可以帮助某人。

    一种有助于遵循一般路线规则的肮脏技巧是在您的web.config 中添加以下部分:

    <configuration>
      <system.web>
        <urlMappings enabled="true">
          <add url="~/api/v1/debug/" mappedUrl="~/mypage.html" />
        </urlMappings>
      </system.web>
    </configuration>
    

    【讨论】:

      猜你喜欢
      • 2021-02-28
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 2020-10-27
      • 2010-11-21
      • 2013-05-27
      • 2023-02-10
      相关资源
      最近更新 更多