【发布时间】:2012-06-11 21:01:29
【问题描述】:
我正在为 HTML 编写媒体类型格式化程序,以根据用户的 html 请求自动生成 Razor 视图。我这样做是为了在 SelfHosted 服务中使用。我需要检测请求了哪些控制器/操作以允许我选择要渲染的视图。
public class RazorHtmlMediaTypeFormatter : MediaTypeFormatter
{
public RazorHtmlMediaTypeFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
}
public override bool CanWriteType(Type type)
{
return true;
}
public override bool CanReadType(Type type)
{
return false;
}
public override Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, System.Net.TransportContext transportContext)
{
return Task.Factory.StartNew(() =>
{
var view = Razor.Resolve(String.Format("{0}.{1}.cshtml", something.Controller, something.Action), value);
byte[] buf = System.Text.Encoding.Default.GetBytes(view.Run(new ExecuteContext()));
stream.Write(buf, 0, buf.Length);
stream.Flush();
});
}
}
【问题讨论】:
-
您没有很好的方法来访问 HttpContext。也许你可以用 global.asax 做点什么?
-
@JoeTuskan 喜欢在开始请求时设置一些静态? IE基本上建立了自己的httpcontext
标签: c# asp.net-web-api mediatypeformatter