WebApi.OwinSelfHost足以在没有IIS的情况下运行asp.net mvc app吗?

时间:2015-12-23 15:47:04

标签: asp.net asp.net-mvc owin self-hosting

some示例如何使用Owin.SelfHost创建控制台应用程序。但我没有找到任何有关自我托管的ASP.NET MVC应用程序的信息。甚至可能吗?
 我想在asp.net技术堆栈中实现node-webkit的可能性。

This问题非常相似。有什么变化吗?有人使用ASP.Net 5 MVC 6 RC1获得了结果吗?

1 个答案:

答案 0 :(得分:3)

答案是问题的第一部分是否。

直到现在在ASP.NET 5 MVC 6中的vNext版本才能自动托管ASP.NET MVC。

经过广泛的研究,我不得不使用Nancyfx在a.net 4.0环境中满足这个要求,或者只是开发一个带有自主主机Web API的spa,并将我的静态内容嵌入到.net 4.5及以上。< / p>

注意:我使用NancyFX的方式与使用Web API的方式相同(我有一个NancyFX和Web API项目,提供来自公共客户端SPA项目的嵌入式内容),它只取决于.net的版本。下面是Web API项目的一个小例子

// In the startup class
// Catch all route for all embedded files!
config.Routes.MapHttpRoute(
    name: "FilesApi",
    routeTemplate: "{folder}/{*file}",
    defaults: new {controller = "File", file = RouteParameter.Optional},
    constraints: new {controller = @"^(?:(?!Some|exceptions|like|api).)*$"}
    );

//My embedded resource files:
var resources = Assemblies.SelectMany(a => a.GetManifestResourceNames()).ToArray();
//To server static content for html I use
protected static HttpResponseMessage GetHtml(string htmlFile)
{
    var fileName = resources.FirstOrDefault(r => r.EndsWith(htmlFile, StringComparison.CurrentCultureIgnoreCase));
    const string mediaType = "text/html";

    if (string.IsNullOrEmpty(fileName))
        return null;
    var result = getResourceText(fileName);

    var responseMessage = new HttpResponseMessage
    {
        Content = new StringContent(result, System.Text.Encoding.UTF8, mediaType)
    };
    return responseMessage;
}

//For everything else I use:
protected static HttpResponseMessage getEmbeddedFile(string file)
{
    var mediaType = getMediaType(file); // NancyFX makes this much easier with their  MimeTypes.GetMimeType(file) helper method
    var ms = getResourceStream(file); //.Save(ms, ImageFormat.Png);
    var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(ms.ToArray()) };
    result.Content.Headers.ContentType = new MediaTypeHeaderValue(mediaType);
    return result;
}

protected static MemoryStream getFileStream(string filename)
{
    var result = new MemoryStream();
    try
    {
        using (var stream = new FileStream(filename, FileMode.Open))
        {
            stream.CopyTo(result);
            result.Position = 0;
        }
    }
    catch (Exception ex)
    {
        Log.Error(ex);
        throw;
    }
    return result;
}