如何从WCF WebAPI WebGet返回原始html

如何从WCF WebAPI WebGet返回原始html,html,wcf,rest,wcf-web-api,Html,Wcf,Rest,Wcf Web Api,我有一个自托管的WCF服务,作为一个windows服务运行,使用WebAPI来处理其余的东西,它工作得很好 我意识到我真的应该使用IIS或类似的工具来发布实际的网页,但有没有办法让服务调用返回“just”html 即使我指定“BodyStye-Bare”,我仍然会得到实际HTML的XML包装,即 <?xml version="1.0" encoding="UTF-8"?> <string> html page contents .... </string>

我有一个自托管的WCF服务,作为一个windows服务运行,使用WebAPI来处理其余的东西,它工作得很好

我意识到我真的应该使用IIS或类似的工具来发布实际的网页,但有没有办法让服务调用返回“just”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");
}

html页面内容。。。。
[WebGet(UriTemplate=“/start”,BodyStyle=WebMessageBodyStyle.Bare)]
公共字符串起始页()
{
return System.IO.File.ReadAllText(@“c:\whatever\somefile.htm”);
}

有什么方法可以做到这一点或者我应该放弃吗?

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

如果不添加处理文本/html的格式化程序,则WebAPI会返回XML格式化程序作为默认设置


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

bodystyle属性对WCF Web API没有影响。下面的示例将起作用。这不一定是最好的方法,但如果我没有输入任何错误,它应该可以工作:-)

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


而且,self-host选项与使用IIS一样是返回静态HTML的可行方法。在封面下,他们使用相同的HTTP.sys内核模式驱动程序来传递位。

感谢heaps,这足够让我达到目的了,我只需将一行更改为“response.Content.Headers.ContentType=new MediaTypeHeaderValue(“text/html”)
[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; 
}