【问题标题】:ServiceStack: Self-Host Not finding static filesServiceStack:自托管未找到静态文件
【发布时间】:2014-06-18 13:04:20
【问题描述】:

我有一个位于以下 URI 的自托管服务:

const string listeningOn = "http://*:80/PassengerTracker/";

注意:我想将它托管在/PassengerTracker。这是最好的方法吗?

我启用了 Razor 视图,并在 _Layout.cshtml 文件中为我的 CSS 静态文件指定了 URL:

<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 放了两次?

【问题讨论】:

  • 查看&lt;link href="@Url.Content("~/Content/bootstrap.min.css")" ... &gt;的输出源时,链接产生的Url是什么?您是否告诉 ServiceStack 处理程序路径在哪里 SetConfig(new EndpointHostConfig { ServiceStackHandlerFactoryPath = "/PassengerTracker" });
  • 是的,我设置了工厂路径,URL 是:http://localhost/Content/bootstrap.min.css
  • 而不是Request.GetApplicationUrl() 你可以试试GetAppHost().Config.ServiceStackHandlerFactoryPath 所以它是&lt;link href="@(GetAppHost().Config.ServiceStackHandlerFactoryPath + "/Content/bootstrap.min.css")" rel="stylesheet" /&gt;
  • 嘿,抱歉正在通勤回家,给我 2 分钟.. 我将创建一个复制品并进行测试! :)
  • 我已经通过更新编辑了我的问题

标签: c# razor servicestack servicestack-bsd


【解决方案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(); 
    } 
}

这应该对你有用,我希望 :)

【讨论】:

  • @BiffBaffBoff 我很高兴这有效。是的,尽管它对我有用,但还是很奇怪。
  • 我确实发现了一个问题,它返回了错误的 MIME 类型,导致 IE 出现问题。我已经通过根据文件扩展名适当地设置 Response.ContentType 来纠正它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 2011-08-06
  • 1970-01-01
  • 2021-05-23
  • 2019-04-29
  • 2021-01-25
  • 2017-09-13
相关资源
最近更新 更多