我正在編寫HTML的媒體類型格式化程序,以根據用戶的html請求自動生成Razor視圖。我正在做這個在SelfHosted服務中使用。我需要檢測請求的控制器/操作,以允許我選擇要呈現的視圖。ASP.Net WebAPI從MediaTypeFormatter中獲取當前的控制器名稱
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做些什麼? – Joe
@JoeTuskan喜歡在開始請求時設置一些靜態? IE基本上建立了我自己的httpcontext –