C# 如何使用IHttpActionResult接口从WebApi 2操作返回html文档?
我需要构建一个html文档并在我的web api中返回它。网络和论坛上的所有可用答案都建议使用HttpResponseMessage。我希望通过IHttpActionResult实现这一点。以下是我到目前为止的情况:C# 如何使用IHttpActionResult接口从WebApi 2操作返回html文档?,c#,html,.net,asp.net-web-api,C#,Html,.net,Asp.net Web Api,我需要构建一个html文档并在我的web api中返回它。网络和论坛上的所有可用答案都建议使用HttpResponseMessage。我希望通过IHttpActionResult实现这一点。以下是我到目前为止的情况: [ResponseType(typeof(HttpResponseMessage))] public async Task<IHttpActionResult> GetNotesViewModels() { var note =
[ResponseType(typeof(HttpResponseMessage))]
public async Task<IHttpActionResult> GetNotesViewModels()
{
var note = await GetHtmlText();
var response = new HttpResponseMessage();
response.Content = new StringContent(note);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
return Ok(ResponseMessage(response));
}
[ResponseType(typeof(HttpResponseMessage))]
公共异步任务GetNotesViewModels()
{
var note=await GetHtmlText();
var response=新的HttpResponseMessage();
response.Content=新的StringContent(注);
response.Content.Headers.ContentType=新的MediaTypeHeaderValue(“文本/html”);
返回Ok(响应消息(响应));
}
我没有收到我想要的东西。这里缺少什么?您可以实现自己的HtmlResult,如下所示(免费):
公共类HtmlActionResult:IHttpActionResult
{
公共HtmlActionResult(HttpRequestMessage请求,字符串内容)
{
请求=请求;
内容=内容;
}
公共字符串内容{get;private set;}
公共HttpRequestMessage请求{get;private set;}
公共任务执行同步(CancellationToken CancellationToken)
{
返回Task.FromResult(ExecuteResult());
}
公共HttpResponseMessageExecuteSult()
{
var response=新的HttpResponseMessage();
如果(!string.IsNullOrWhiteSpace(Content))
response.Content=newstringcontent(Content,Encoding.UTF8,“text/html”);
response.RequestMessage=请求;
返回响应;
}
}
然后像这样使用它:
public async Task<IHttpActionResult> GetNotesViewModels()
{
var note = await GetHtmlText();
return new HtmlActionResult(Request, note);
}
public异步任务GetNotesViewModels()
{
var note=await GetHtmlText();
返回新的HtmlActionResult(请求、注释);
}
通过使用Ok()
将您的响应包装在NegotiatedContentResult
中,它将尝试将您的HttpResponseMessage
序列化为json(或xml)。Web Api 2支持将HttpResponseMessage
直接作为返回类型:只需使用它而不是IHttpActionResult
,然后返回您的response
对象。@FedericoDipuma非常好。工作!
public async Task<IHttpActionResult> GetNotesViewModels()
{
var note = await GetHtmlText();
return new HtmlActionResult(Request, note);
}