ServiceStack не отображает Razor View, а только видит моментальный снимок

Я настроил очень простой проект ServiceStack с помощью Bootstrap, и я пытаюсь заставить его увидеть мою домашнюю страницу (Razor View), чего нет, поэтому я получаю Снимок моей домашней страницы. Вот шаги, которые я предпринимаю для создания проекта:

  1. Создать новый проект "ServiceStack ASP.Net с Bootstrap"
  2. Откройте Nuget Server Console, чтобы загрузить недостающие пакеты Servicetack.
  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>

1 ответ

Решение

Похоже, эта проблема может быть связана с существующим шаблоном MVC Razor, который добавляет пакет NuGet Microsoft.AspNet.Razor.3.2.2 который перекрывает ServiceStack.Razor ссылка.

Одним из способов избежать этого является использование базового шаблона элемента HTML при добавлении нового представления и присвоение ему имени cshtml расширение.

HTML-файл обойти

Это позволит избежать нежелательных ссылок NuGet, поступающих из шаблонов элементов MVC.

Чтобы сделать это более простым и очевидным, расширение ServiceStackVS было обновлено и теперь включает простой шаблон элемента Razor, который не добавляет проблемных пакетов Microsoft.AspNet.Razor.3.2.2 NuGet и просто добавляет пустую HTML-страницу.

ServiceStackVS Шаблон элемента бритвы

Если вы случайно используете один из шаблонов элементов MVC, чтобы исправить свой проект, вам нужно будет выполнить следующие шаги.

  1. Щелкните правой кнопкой мыши проект -> Управление пакетами NuGet.
  2. Выбрать Installed packages в верхней левой вкладке (VS 2013)
  3. Удалите Microsoft ASP.NET Razor связанные пакеты
  4. Удалить ServiceStack.Razor
  5. Переустановите ServiceStack.Razor
  6. удалять <runtime> записей для System.Web ранее не было до добавления элемента Razor.

Надеюсь, это поможет.

Другие вопросы по тегам