ASP.NET MVC 4 / Web API – 为Accepts插入Razor渲染器:text /
我正在使用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()); 上面的代码是从博客文章复制而来的,不是我的工作 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .Net Core 3.0后台使用httpclient请求网络网页和图片_使用C
- asp-classic – 在Integrated Pipeline中运行的经典ASP
- Asp.NEt邮箱验证修改密码通过邮箱找回密码功能
- asp.net – ASPXGridView ClientSideEvents如何获取所选行的
- asp.net – web.config urlmapping
- asp.net 上传或下载当文件名包含有特殊字符"#"的处理
- asp.net-mvc – Telerik MVC Grid,从自定义命令删除ajax后重
- asp.net-web-api – 如何在IdentityServer4中在运行时添加/
- asp.net-mvc – 使用路由操作URL
- asp.net-mvc – Orchard CMS:未显示内容部分
- ASP.NET图像上传与调整大小
- 如何在ASP.NET MVC控制器(ActionResult)中更改返
- 如何使用ASP.NET创建和填充ZIP文件?
- asp.net-mvc-3 – ASP.NET MVC – 不同角色的菜单
- 经典ASP(VBScript)替换字符串中的特殊字符表现得
- asp.net-mvc-2 – 将日期参数传递给RedirectToAc
- 如何在MVC_WebAPI项目中的APIController帮助页面
- asp.net – 如何将IDENTITY_INSERT设置为ON?
- 为什么开发人员在实现版本控制时如此珍贵地发布A
- asp.net-mvc – ASP.NET MVC中基础控制器类的好候