ServiceStack:自主机未找到静态文件

时间:2014-06-18 13:04:20

标签: c# razor servicestack servicestack-bsd

我有一个自托管服务,位于以下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两次?

1 个答案:

答案 0 :(得分:3)

在聊天讨论中,您的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(); 
    } 
}

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