2

今天我很头疼,为什么在升级到最新的 servicestack 和 servicestack.razor 后,我的 Web 服务路由停止工作。所以我做了以下测试。

  1. 在 vs.net 2012 中创建了一个新的空 web 项目
  2. 从 rockstar 添加了 web.config 文件
  3. 通过 nuget 添加 servicestack 和 razor
  4. 添加了 apphost 和 global.asa
  5. 在我的 configure() 中我没有添加任何东西 - 没有插件。
  6. 添加了一个指定路由的简单回声服务

此时一切正常,我单击路由的 url 并取回我的回显结果

  1. 将行添加到配置以添加 RazorFormat 插件

现在路由不起作用,从服务返回后,我得到 404(找不到文件)回显数据。我可以为该服务创建一个视图,然后一切正常,但是默认显示发生了什么?

谢谢马克

我尝试对开箱即用的 servicestack 示例做同样的事情并得到相同的结果

  1. 从 servicestack 中提取样本 – RootPath40 + Common 并将它们包含在单独的解决方案中

  2. 已编译并且可以工作

  3. 示例使用的当前版本的 servicestack 是 3.9.11.0

  4. 运行以下内容以更新 servicestack 并在解决方案中的两个项目上安装 razor,以便我获得最新的 3.9.45

    安装包服务堆栈

    安装包 servicestack.razor

  5. 测试 - 工作正常!!!。我正在使用路由 Hello -> localhost/RootPath40/hello 专门测试 Hello 服务

向 Global.asax.cs 添加 1 行 – 配置函数

public override void Configure(Container container)
        {
            container.Register(new TodoRepository());
            **Plugins.Add(new RazorFormat());**
       }
  1. 现在路由 hello 不再起作用了,因为我收到错误 404 not found。

我正在使用 vs.net 2012 和 windows 8

我确定我错过了一些非常微不足道的东西,任何人都知道......

谢谢

经过一番挣扎后,我看到如果我添加对System.Web.Razor.Unofficial.dll的引用,则提供剃刀页面但路由的 Web 服务停止工作,在我删除引用的那一刻,Web 服务路由 URL 很好,但剃刀页面不送达。

我错过了什么?

4

2 回答 2

2

最后我发现了问题。新版本的 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;
            ...
            ...

“不”!(感叹号)缺失,但只有在没有任何 ViewEngines 执行请求时才应返回。我添加了 NOT 和 walla,一切正常。

  if (httpReq != null && **!**AppHost.ViewEngines.Any(x => x.ProcessRequest(httpReq, httpRes, response))) return;

谢谢

标记

于 2013-05-19T00:44:59.873 回答
0

这是在此问题中确定并在ServiceStack.Razor的 v3.9.46+ 中修复的新 Razor 支持的错误。

于 2013-05-19T13:02:53.197 回答