ServiceStack не отображает Razor View, а только видит моментальный снимок
Я настроил очень простой проект ServiceStack с помощью Bootstrap, и я пытаюсь заставить его увидеть мою домашнюю страницу (Razor View), чего нет, поэтому я получаю Снимок моей домашней страницы. Вот шаги, которые я предпринимаю для создания проекта:
- Создать новый проект "ServiceStack ASP.Net с Bootstrap"
- Откройте Nuget Server Console, чтобы загрузить недостающие пакеты Servicetack.
- Построить.
- Переименованы Services.cs в MyStuffServices.cs и Model.cs в MyStuffModel.cs
Добавлено в AppHost.cs:
SetConfig(new HostConfig { DefaultRedirectPath = "/Home" });
Перемещено "_layout.cshtml" из /veiws/shared в папку /views
- Добавлен "Home.cshtml" в /views
- Добавлен незначительный текст в Home.cshtml
Добавлено в MyStuffService.cs
public class HomeService : Service { [DefaultView("Home")] public int Get(Home request) { return 0; } }
Добавлено в MyStuffModel.cs:
[Route("/home", "GET")] public class Home : IReturn<int> { }
- Построить.
- Запустите 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
расширение.
Это позволит избежать нежелательных ссылок NuGet, поступающих из шаблонов элементов MVC.
Чтобы сделать это более простым и очевидным, расширение ServiceStackVS было обновлено и теперь включает простой шаблон элемента Razor, который не добавляет проблемных пакетов Microsoft.AspNet.Razor.3.2.2 NuGet и просто добавляет пустую HTML-страницу.
Если вы случайно используете один из шаблонов элементов MVC, чтобы исправить свой проект, вам нужно будет выполнить следующие шаги.
- Щелкните правой кнопкой мыши проект -> Управление пакетами NuGet.
- Выбрать
Installed packages
в верхней левой вкладке (VS 2013) - Удалите Microsoft ASP.NET Razor связанные пакеты
- Удалить ServiceStack.Razor
- Переустановите ServiceStack.Razor
- удалять
<runtime>
записей для System.Web ранее не было до добавления элемента Razor.
Надеюсь, это поможет.