今天我很困惑,为什么在升级到最新的 servicestack 和 servicestack.razor 后,我的 Web 服务中的路由停止工作。所以我做了以下测试。
- 在 vs.net 2012 中创建了一个新的空 Web 项目
- 添加了来自 rockstar 的 web.config 文件
- 通过 nuget 添加了 servicestack 和 razor
- 添加了 apphost 和 global.asa
- 在我的configure()中我没有添加任何东西——没有插件。
- 添加了一个简单的 echoservice 并指定了路由
此时一切正常,我单击路由网址并获取回显结果
- 在配置中添加了添加 RazorFormat 插件的行
现在路由不起作用,从带有回显数据的服务返回后,我收到 404(文件未找到)。我可以为该服务创建一个 View ,然后一切都很好,但是默认显示发生了什么?
谢谢 标记
我尝试对开箱即用的 servicestack 示例执行相同操作并获得相同的结果
从服务堆栈中获取示例 - RootPath40 + Common 并将它们包含在单独的解决方案中
编译成功
示例使用的服务堆栈的当前版本是 3.9.11.0
运行以下命令来更新服务堆栈并在解决方案中的两个项目上安装 razor 所以我得到最新的 3.9.45
安装包服务栈
安装包servicestack.razor
经过测试 - 工作正常!!!。我正在使用路由 Hello -> 专门测试 Hello 服务 本地主机/RootPath40/hello
在 Global.asax.cs 中添加了 1 行 - 配置功能
public override void Configure(Container container)
{
container.Register(new TodoRepository());
**Plugins.Add(new RazorFormat());**
}
- 现在路由 hello 不再起作用,因为我收到错误 404 not found。
我正在使用 vs.net 2012 和 Windows 8
我确信我错过了一些非常微不足道的东西,任何人都知道......
谢谢
经过一番努力后,我发现如果我添加对 System.Web.Razor.Unofficial.dll 的引用,则会提供 razor 页面,但路由的 Web 服务会在我删除引用后停止工作Web 服务路由 URL 正常,但没有提供 Razor 页面。
我错过了什么?
最佳答案
终于我找到了问题所在。 新版本的servicestack(3.9.45.0)似乎在IF条件中有一个错误。
在 HtmlFormat.cs 中
public void SerializeToStream(IRequestContext requestContext, object response, IHttpResponse httpRes)
{
var httpReq = requestContext.Get<IHttpRequest>();
if (httpReq != null && AppHost.ViewEngines.Any(x => x.ProcessRequest(httpReq, httpRes, response))) return;
...
...
“不”! (感叹号)丢失,但只有在没有 ViewEngine 执行请求时才应返回。我添加了 NOT 和 walla,一切正常。
if (httpReq != null && **!**AppHost.ViewEngines.Any(x => x.ProcessRequest(httpReq, httpRes, response))) return;
谢谢
标记
关于razor - 为什么添加 razorformat 会破坏 servicestack 最新 3.9.45.0 中的 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16618526/