3

我已经尝试了所有 Razor 自托管和 servicestack 模板,在这些项目中,如果您安装了 razorFormat,则可以提供静态 html 和 cshtml。我不知道我做错了什么,我刚刚将代码复制到新的解决方案中,我无法获得 html 响应。我可以始终获取元数据页面并且服务正常工作。我无法添加 default.htm 并使其正常工作。
如果我输入,http://localhost:1337我应该被定向到默认页面。也许我错过了一些东西,但我不知道它是什么。如果有人可以帮我一把,我将不胜感激!

这是我的default.htm

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
        <title></title>
    </head>
    <body>
    SOMETEXT
    </body>
</html>

这是我的程序

class Program
    {
        [Route("/hello")]
        [Route("/hello/{Name}")]
        public class Hello
        {
            public string Name { get; set; }
        }

        public class HelloResponse
        {
            public string Result { get; set; }
        }

        public class HelloService : Service
        {
            public object Any(Hello request)
            {
                return new HelloResponse { Result = "Hello, " + request.Name };
            }
        }

        public class AppHost : AppHostHttpListenerBase {
            public AppHost() : base("StarterTemplate HttpListener",                             typeof(HelloService).Assembly) {
            }

            public override void Configure(Funq.Container container) {
                container.Register(new HelloService());
            }    
        }

        static void Main(string[] args)
        {
            var listeningOn = args.Length == 0 ? "http://*:1337/" : args[0];
            var appHost = new AppHost();
            appHost.Init();
            appHost.Start(listeningOn);

            Console.WriteLine("AppHost Created at {0}, listening on {1}", DateTime.Now, listeningOn);
            Console.ReadKey();
        }
    }

编辑:我应该添加我得到的响应。

Handler for Request not found: 


Request.HttpMethod: GET
Request.HttpMethod: GET
Request.PathInfo: /default.htm
Request.QueryString: 
Request.RawUrl: /default.htm

我尝试的另一件事是在 AppHostHttpListenerBase.Configure 中放置一个请求过滤器。我什至在我的项目中都没有做到这一点,但我在模板项目中做到了。

编辑:我发现问题是我的 Default.html 和 app.Config 文件没有移动到 bin/Debug 目录。有没有人遇到过这个问题?

4

2 回答 2

1

这是一篇关于为自托管/控制台应用程序提供 Razor 页面的好博文。我认为您不需要 app.config 或 web.config 文件,尽管我可能是错的。

我认为你缺少的两件事:

1) 添加Plugins.Add(new RazorFormat())到 AppHost 中的 Configure 方法
2) 将 Razor 文件的“复制到输出目录”值更改为“如果更新则复制”(这在文件的属性设置中)。另外,将您的default.htm文件更改为default.cshtml.

于 2013-05-16T19:44:43.937 回答
0

对于 OS X 中的 xamarin,“复制到输出目录”肯定会让人头疼,因为您应该在每个文件上选择此选项,有时甚至两次。所以另一个选择是创建符号链接

ln -s /path_to_project/assets /path_to_project/bin/Debug/assets 
ln -s /path_to_project/Views /path_to_project/bin/Debug/Views 

它对于资产中的数百个文件非常有用,并且对于 Views 文件夹更容易一些。

在 Linux 主机上也可以这样做,将 selfhost.exe 和 *.dll 隐藏在 bin 文件夹中

于 2014-04-21T11:30:01.063 回答