ASP.NET MVC 4 / Web API – 为Accepts插入Razor渲染器:text / html
|
我正在使用ASP.NET MVC 4 Web API创建RESTful Web服务.对于API访问,我正在返回 JSON,但是一旦我使一切正常工作,内容协商默认情况下应该适用于XML和JSON. 由于我正在努力建立一个真正的RESTful以资源为中心的Web服务,我的URI将指向实际的资源.我想通过返回资源的HTML表示来利用它,如果Accepts:text / html出现在请求中(比如在浏览器中抛出链接). 我希望能够利用MVC 4 Web API的内容协商来为使用Razor模板的text / html插入渲染器.这样做有什么工作的例子吗? 是的,这是桥接“常规”MVC页面和Web API.基本上我想创建一个渲染器,它使用基于约定的方法来查找和渲染Razor视图,就像“常规”MVC一样.我可以提出基于约定的视图查找逻辑.我只是在寻找a)全局插入我的text / html渲染器进入内容协商,以及b)手动使用Razor引擎将我的模型渲染为HTML. 解决方法FredrikNormén有一篇关于这个主题的博客文章:http://weblogs.asp.net/fredriknormen/archive/2012/06/28/using-razor-together-with-asp-net-web-api.aspx 基本上,您需要创建MediaTypeFormatter using System;
using System.Net.Http.Formatting;
namespace WebApiRazor.Models
{
using System.IO;
using System.Net;
using System.Net.Http.Headers;
using System.Reflection;
using System.Threading.Tasks;
using RazorEngine;
public class RazorFormatter : MediaTypeFormatter
{
public RazorFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/xhtml+xml"));
}
//...
public override Task WriteToStreamAsync(
Type type,object value,Stream stream,HttpContentHeaders contentHeaders,TransportContext transportContext)
{
var task = Task.Factory.StartNew(() =>
{
var viewPath = // Get path to the view by the name of the type
var template = File.ReadAllText(viewPath);
Razor.Compile(template,type,type.Name);
var razor = Razor.Run(type.Name,value);
var buf = System.Text.Encoding.Default.GetBytes(razor);
stream.Write(buf,buf.Length);
stream.Flush();
});
return task;
}
}
}
然后在Global.asax中注册它: GlobalConfiguration.Configuration.Formatters.Add(new RazorFormatter()); 上面的代码是从博客文章复制而来的,不是我的工作 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC3验证与实体框架模型/数据库首先
- asp.net – 是否使用Page_IsValid或Page_ClientValidate()(
- asp.net-mvc – 无法在Web服务器上启动调试. Web服务器找不
- asp.net-mvc – web.config在哪里用于MVC应用程序?
- Asp.Net MVC验证 – 依赖字段
- asp.net-mvc-4 – 如何通过MVC4 upshot上传相关实体
- asp.net-mvc-3 – 如何注入依赖项到global.asax.cs
- asp.net – 什么时候读取web.config?
- asp.net – MS Chart控件创建的临时文件应该放在哪里?
- asp.net-core – 使用.NET Core时需要AssemblyInfo吗?
- 在ASP.NET中使用新的会话ID打开一个新的浏览器窗
- asp.net-core – asp.net核心依赖注入问题 – Ad
- asp.net – 调用en外部javascript文件的函数
- asp.net-mvc – 具有引导Navbar的MVC – 将所选项
- asp.net-mvc – 从ASP.NET MVC应用程序写入Event
- asp.net-mvc – 如何为ASP.NET 4.5 Web API创建M
- asp.net – IIS URL重写 – 具有多个域
- asp.net – .NET中的商业网络应用程序 – 选择哪
- ASP.NET MVC中使用区域时的配置错误4
- 在子文件夹中运行ASP.NET网站
