ServiceStack 不渲染 Razor View,只看到 Snap Shot

ServiceStack not rendering Razor View, only seeing Snap Shot

我已经用 Bootstrap 建立了一个非常基本的 ServiceStack 项目,我试图让它看到我的主页(Razor 视图),但它没有,所以我得到了我的快照主页。以下是我创建项目的步骤:

  1. 新建项目"ServiceStack ASP.Net with Bootstrap"
  2. 打开 Nuget 服务器控制台以下载缺少的 Servicestack 包。
  3. 建造。
  4. 已将 Services.cs 重命名为 MyStuffServices.cs 并将 Model.cs 重命名为 MyStuffModel.cs
  5. 添加到'AppHost.cs':

    SetConfig(new HostConfig
            {
                DefaultRedirectPath = "/Home"
            }); 
    
  6. 将“_layout.cshtml”从 /veiws/shared 移动到 /views 文件夹

  7. 已将 "Home.cshtml" 添加到 /views
  8. 向 Home.cshtml 添加了次要文本
  9. 添加到MyStuffService.cs

    public class HomeService : Service
    {
         [DefaultView("Home")]
         public int Get(Home request)
         {
             return 0;
         }
    }   
    
  10. 已添加到 MyStuffModel.cs:

    [Route("/home", "GET")]    
    public class Home : IReturn<int>
    {
    
    }
    
  11. 建造。
  12. 运行 Internet Explorer - 获取快照页面。

这是我的 AppHost.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using Funq;
    using ServiceStack;
    using ServiceStack.Razor;
    using MyStuff.ServiceInterface;

    namespace MyStuff
    {
    public class AppHost : AppHostBase
    {
    /// <summary>
    /// Default constructor.
    /// Base constructor requires a name and assembly to locate web service classes. 
    /// </summary>
    public AppHost()
        : base("MyStuff", typeof(MyStuffServices).Assembly)
    {

    }

    /// <summary>
    /// Application specific configuration
    /// This method should initialize any IoC resources utilized by your web service classes.
    /// </summary>
    /// <param name="container"></param>
    public override void Configure(Container container)
    {
        //Config examples
        //this.Plugins.Add(new PostmanFeature());
        //this.Plugins.Add(new CorsFeature());

        this.Plugins.Add(new RazorFormat());

        SetConfig(new HostConfig
        {
            DefaultRedirectPath = "/Home"
        });
    }
}
}

这是我的 Global.asax

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.SessionState;

    namespace MyStuff
    {
        public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
    {
        new AppHost().Init();
    }
}
}

我没有错误,包管理器说我没有遗漏任何包。我觉得我缺少了一步,非常感谢任何帮助。

更新:在启用调试的情况下执行时,这是我用 Internet Explorer 打开时得到的结果

@inherits ViewPage
@{
    ViewBag.Title = "Hello World Service";
}
<div>
    <div>
        <input class="form-control input-lg" id="Name" type="text"     placeholder="Type your name">
        <p id="helloResult" style="margin-top: 15px;font-size: large"></p>
    </div>
</div>
<script>
    $('#Name').keyup(function () {
        var name = $('#Name').val();
        if (name) {
            $.getJSON('/hello/' + name)
                 .success(function (response) {
                     $('#helloResult').html(response.Result);
                });
        } else {
             $('#helloResult').html('');
        }
    });
</script>

看起来这个问题可能来自现有的 MVC Razor 项模板,该模板正在添加覆盖 ServiceStack.Razor 引用的 NuGet 包 Microsoft.AspNet.Razor.3.2.2

避免这种情况的一种方法是在添加新视图时使用基本的 HTML 项目模板,并使用 cshtml 扩展名命名它。

这将避免来自 MVC 项模板的不需要的 NuGet 引用。

为了使这一点更加直接和明显,ServiceStackVS extension has been updated 包含一个简单的 Razor 项模板,该模板不会添加有问题的 Microsoft.AspNet.Razor.3.2.2 NuGet 包,并且只需添加一个空白 HTML页。

如果您不小心使用了 MVC 项目模板之一,要修复您的项目,您需要执行以下步骤。

  1. 右键单击项目 -> 管理 NuGet 包
  2. Select Installed packages 在左上角选项卡 (VS 2013)
  3. 卸载 Microsoft ASP.NET Razor 相关包
  4. 卸载ServiceStack.Razor
  5. 重新安装ServiceStack.Razor
  6. 删除 <runtime> System.Web 条目在添加 Razor 项目之前不存在。

希望对您有所帮助。