如何从 WCF WebAPI WebGet 返回原始 html

发布于 2024-12-15 05:21:37 字数 512 浏览 1 评论 0原文

我有一个自托管的 WCF 服务作为 Windows 服务运行,使用 WebAPI 来处理 REST 内容,并且效果很好。

我意识到我真的应该使用 IIS 或类似的工具来提供实际的网页,但是有没有办法让服务调用返回“仅”html?

即使我指定“BodyStye Bare”,我仍然会得到实际 HTML 周围的 XML 包装器,即

<?xml version="1.0" encoding="UTF-8"?>
<string> html page contents .... </string>


[WebGet(UriTemplate = "/start", BodyStyle = WebMessageBodyStyle.Bare)]
public string StartPage()
{
    return System.IO.File.ReadAllText(@"c:\whatever\somefile.htm");
}

有什么方法可以做到这一点还是我应该放弃?

I have a self-hosted WCF service running as a windows service using the WebAPI to handle the REST stuff and it works great.

I realise that I should really use IIS or similar to dish out actual web pages, but is there ANY way to get a service call to return "just" html?

Even if I specify "BodyStye Bare", I still get the XML wrapper around the actual HTML, ie

<?xml version="1.0" encoding="UTF-8"?>
<string> html page contents .... </string>


[WebGet(UriTemplate = "/start", BodyStyle = WebMessageBodyStyle.Bare)]
public string StartPage()
{
    return System.IO.File.ReadAllText(@"c:\whatever\somefile.htm");
}

Is there any way to do this or should I give up?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一页 2024-12-22 05:21:37

bodystyle 属性对 WCF Web API 没有影响。下面的例子将会起作用。这不一定是最好的方法,但假设我没有犯任何拼写错误,它应该可以工作:-)。

[WebGet(UriTemplate = "/start")] 
public HttpResponseMessage StartPage() {
    var response = new HttpResponseMessage();
    response.Content = new StringContent(System.IO.File.ReadAllText(@"c:\whatever\somefile.htm"));
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
    return response; 
}

将文件作为流读取并使用 StreamContent 而不是 StringContent 可能更有意义。或者很容易创建您自己的 FileContent 类,该类接受文件名作为参数。

而且,自托管选项与使用 IIS 返回静态 HTML 一样可行。在幕后,它们使用相同的 HTTP.sys 内核模式驱动程序来传递位。

The bodystyle attribute has no effect on WCF Web API. The example below will work. It's not necessarily the best way of doing it, but it should work assuming I didn't make any typos :-).

[WebGet(UriTemplate = "/start")] 
public HttpResponseMessage StartPage() {
    var response = new HttpResponseMessage();
    response.Content = new StringContent(System.IO.File.ReadAllText(@"c:\whatever\somefile.htm"));
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
    return response; 
}

It would probably make more sense to read the file as a stream and use StreamContent instead of StringContent. Or it is easy enough to make your own FileContent class that accepts the filename as a parameter.

And, the self-host option is just as viable way to return static HTML as using IIS. Under the covers they use the same HTTP.sys kernel mode driver to deliver the bits.

遮了一弯 2024-12-22 05:21:37

您必须使用接受“text/html”作为内容类型的格式化程序,并在请求标头中请求内容类型“text/html”。

如果您不添加处理 text/html 的格式化程序,Web API 将默认使用 XML 格式化程序。

在您的情况下,格式化程序不需要格式化任何内容,而只需返回您的返回值,因为您已经返回了格式化的 html。

You'll have to use a formatter that accepts "text/html" as content type and request the content type "text/html" in your request header.

If you don't add a formatter that handles the text/html, Web API falls back to the XML-formatter as default.

In your case the formatter doesn't need to format anything but just return your return value as you're returning formatted html already.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文