some示例如何使用Owin.SelfHost
创建控制台应用程序。但我没有找到任何有关自我托管的ASP.NET MVC应用程序的信息。甚至可能吗?
我想在asp.net技术堆栈中实现node-webkit的可能性。
This问题非常相似。有什么变化吗?有人使用ASP.Net 5 MVC 6 RC1获得了结果吗?
答案 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;
}