#c# #razor #servicestack #servicestack-bsd
#c# #razor #servicestack #servicestack-bsd
Вопрос:
У меня есть автономный сервис, который находится в следующем URI:
const string listeningOn = "http://*:80/PassengerTracker/";
Примечание: я хочу разместить его по адресу /PassengerTracker
. Это лучший способ сделать это?
У меня включены Razor Views, и я указал URL-адрес таким образом для моих статических файлов CSS в моем _Layout.cshtml
файле:
<link href="@Url.Content("~/Content/bootstrap.min.css")" rel="stylesheet" />
Однако это возвращает значение 404. Я установил Copy to Ouput Directory
значение Copy Always
Редактировать
Если я попытаюсь:
<link href="@(Request.GetApplicationUrl()
"/Content/bootstrap.min.css")" rel="stylesheet" />
Я получаю NotImplementedException
..
Если я изменю listeningOn
на http://*:80/
. Я могу использовать @Url.Content
нормально.
Редактировать 2
Я попробовал следующее в соответствии с комментарием @Scott ниже:
<link href="@(AppHost.Config.ServiceStackHandlerFactoryPath
"/Content/bootstrap.min.css")" rel=" stylesheet" />
Но он возвращает 404:
GET http://localhost:8090/passengertracker/PassengerTracker/Content/bootstrap.min.css
404
Я заметил, что он вставляется PassengerTracker
дважды?
Комментарии:
1. Какой URL-адрес создается в ссылке при просмотре
<link href="@Url.Content("~/Content/bootstrap.min.css")" ... >
выходного источника? Вы сообщили ServiceStack, где находится путь к обработчикуSetConfig(new EndpointHostConfig { ServiceStackHandlerFactoryPath = "/PassengerTracker" });
?2. Да, я установил заводской путь, и URL-адрес:
http://localhost/Content/bootstrap.min.css
3. Вместо
Request.GetApplicationUrl()
того, чтобы вы можете попробоватьGetAppHost().Config.ServiceStackHandlerFactoryPath
, так оно и есть<link href="@(GetAppHost().Config.ServiceStackHandlerFactoryPath "/Content/bootstrap.min.css")" rel="stylesheet" />
4. Эй, извините, что ехал домой, дайте мне 2 минуты.. Я создам репро и протестирую! 🙂
5. Я отредактировал свой вопрос с обновлением
Ответ №1:
Из обсуждения в чате, похоже, возникла проблема со статическим обработчиком файлов вашего ServiceStack, поэтому вы могли бы создать простую службу, которая, по сути, выполняет ту же задачу и обслуживает файлы из Content
каталога.
[Route("/content/{filePath*}", "GET")]
public class ContentRequest : IReturnVoid
{
public string filePath { get; set; }
}
public class ContentService : Service
{
public void Get(ContentRequest request)
{
var fullPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "Content", request.filePath);
Response.WriteFile(fullPath);
Response.End();
}
}
Я надеюсь, это должно сработать для вас 🙂
Комментарии:
1. @BiffBaffBoff Я рад, что это сработало. Да, все еще довольно странно, хотя то, как это сработало для меня.
2. Я обнаружил проблему с этим, он возвращал неправильный тип MIME, который вызывал проблему в IE. Я исправил это, установив ответ. Тип содержимого соответствующим образом зависит от расширения файла