可以使用ASP.Net路由(而不是MVC)来提供静态文件吗?
说我想路线
http://domain.tld/static/picture.jpg
Run Code Online (Sandbox Code Playgroud)
至
http://domain.tld/a/b/c/picture.jpg
Run Code Online (Sandbox Code Playgroud)
我想动态地做这件事,因为重写的URL是动态计算的.我无法一劳永逸地建立静态路线.
无论如何,我可以创建这样的路线:
routes.Add(
"StaticRoute", new Route("static/{file}", new FileRouteHandler())
);
Run Code Online (Sandbox Code Playgroud)
在FileRouteHandler.ProcessRequest
方法我可以重写从路径/static/picture.jpg
到/a/b/c/picture.jpg
.然后我想为静态文件创建一个处理程序.ASP.NET使用它StaticFileHandler
来实现此目的.不幸的是,这堂课是内部的.我试图使用反射创建处理程序,它实际上工作:
Assembly assembly = Assembly.GetAssembly(typeof(IHttpHandler));
Type staticFileHandlerType = assembly.GetType("System.Web.StaticFileHandler");
ConstructorInfo constructorInfo = staticFileHandlerType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null);
return (IHttpHandler) constructorInfo.Invoke(null);
Run Code Online (Sandbox Code Playgroud)
但使用内部类型似乎不是正确的解决方案.另一个选择是实现我自己的StaticFileHandler
,但正确地这样做(支持范围和etags等HTTP的东西)是非常重要的.
我该如何处理ASP.NET中静态文件的路由?
我的Express应用程序上有一条如下所示的路线:
app.get('/:id', function (request, response) {
…
});
Run Code Online (Sandbox Code Playgroud)
ID始终是一个数字.但是,目前这条路线与其他东西相匹配,例如/login
.
我想我想要两件事:
/login
).可以这样做吗?
我开始看看Node.js. 我也在用Express.我有一个问题 - 如何组织Web应用程序路由?所有示例都将所有这些app.get/post/put()
处理程序放在app.js中,它运行得很好.这很好,但如果我有一个简单的硬件博客?有可能做这样的事情:
var app = express.createServer();
app.get( '/module-a/*', require('./module-a').urls );
app.get( '/module-b/*', require('./module-b').urls );
Run Code Online (Sandbox Code Playgroud)
和
// file: module-a.js
urls.get('/:id', function(req, res){...}); // <- assuming this is handler for /module-a/1
Run Code Online (Sandbox Code Playgroud)
换句话说 - 我喜欢Django的URLConf,但是在Node.js中.
我是Javascript的新手,只是出于好奇而开始摆弄Meteor.让我感到惊讶的是,似乎所有HTML内容都被合并到一个页面中.
我怀疑有一种方法可以引入一些指向特殊页面的URL处理.似乎"todo"示例能够通过某种类来实现Router
.这是URL处理的"规范"方式吗?
假设我可以处理URL,我将如何构建HTML代码以显示单独的页面?在我的情况下,他们每个人都可以拥有完全独立的数据集,因此根本不需要共享任何HTML代码.
我有2个html页面,welcome.html
以及login.html
这两者都是"插入"到index.html
通过在URL dependending ngview
属性和路由器供应商,作为我的AngularJS应用程序的一部分.
可以在AngularJS主页的Wire up a Backend下找到此示例.
我的问题:有没有办法动画之间的过渡welcome.html
和login.html
?
当我有一个需要多个参数的路由时,我遇到了Html.ActionLink的问题.例如,给定我的Global.asax文件中定义的以下路由:
routes.MapRoute(
"Default", // Route name
"{controller}.mvc/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute(
"Tagging",
"{controller}.mvc/{action}/{tags}",
new { controller = "Products", action = "Index", tags = "" }
);
routes.MapRoute(
"SlugsAfterId",
"{controller}.mvc/{action}/{id}/{slug}",
new { controller = "Products", action = "Browse", id = "", slug = "" }
);
Run Code Online (Sandbox Code Playgroud)
前两条路线没有问题,但是当我尝试使用以下方法创建到第三条路线的动作链接时:
<%= Html.ActionLink(Html.Encode(product.Name), "Details", new { id = product.ProductId, slug = Html.Encode(product.Name) }) %>
Run Code Online (Sandbox Code Playgroud)
我最终得到了像[site-root]/Details/1?slug = url-slug …
我正在设计一个基于浏览器的单页浏览器.
JQuery
已经在我的应用程序中使用.我目前正计划KnockoutJS
用于数据绑定和UI管理.但是我Backbone.js
过去曾经使用过,我对控制器层提供的路由设施印象非常深刻.
我还研究了一些基于JQuery的解决方案,比如用于客户端路由的pathjs.
如果有人能够为选择合适的路由系统提供建议和指导,那就太好了.
我不愿意使用Backbone.js
而不是KnockoutJS
因为优秀的数据绑定设施KnockoutJS
.
使用ASP.Net路由时,如何从代码隐藏中获取RouteData?
我知道你可以从RouteHandler的GetHttpHander方法获得它(你得到了RequestContext),但是你可以从代码隐藏中得到它吗?
有没有...
RequestContext.Current.RouteData.Values["whatever"];
Run Code Online (Sandbox Code Playgroud)
...你可以全局访问,就像你可以使用HttpContext一样?
或者是否只是从RouteHandler内部访问RouteData?
使用ui-router-ng2而不是新的Angular2路由器有什么好处和缺点?在过去,我使用ui-router和Angular 1.x而不是使用ngRoute,因为我需要更好地支持嵌套状态/路由.
那么现在,Angular2呢?我想听听你的意见,以便我能评估这两个机会.
此外,搜索和搜索谷歌我发现ngrx /路由器,我不知道.你能告诉我Angular2 的内置路由器,Angular2和ngrx路由器的新ui路由器之间有什么区别吗?
所以我开始使用Node.js. 我在Nodejs.org上看过 Ryan Dahl的视频,并听说他为网站推荐了Express-js.
我下载了最新版本的Express,并开始编写代码.我在/上有一个完全成熟的静态视图,但是一旦我尝试发送参数,我就会遇到这样的错误:
Cannot GET /wiki
Run Code Online (Sandbox Code Playgroud)
我尝试按照expressjs.com上的指南进行操作,但是在最新版本中使用路由的方式已经改变,这使得指南无法使用.
指南:
app.get('/users/:id?', function(req, res, next){
var id = req.params.id;
if (id) {
// do something
} else {
next();
}
});
Run Code Online (Sandbox Code Playgroud)
由Express生成:
app.get('/', routes.index);
Run Code Online (Sandbox Code Playgroud)
当我尝试添加另一条路线时,我的问题就出现了.
app.get('/wiki', routes.wiki_show);
Run Code Online (Sandbox Code Playgroud)
我尝试了很多方法,但我一直得到Cannot GET /wiki
(404)错误.
routes/index.js看起来像这样:
exports.index = function(req, res) {
res.render('index', { title: 'Test', articles: articles, current_article: current_article, sections: sections })
};
Run Code Online (Sandbox Code Playgroud)
我在那里做的唯一事情是添加一些参数(同一文件中的数组),这我工作.但是,当我复制内容并更改exports.index
为exports.wiki
或exports.wiki_show
仍然得到Cannot GET /wiki
错误.
任何人都可以向我解释我在这里缺少什么吗?- 谢谢.
url-routing ×10
asp.net ×3
express ×3
javascript ×3
node.js ×3
routing ×2
angular ×1
angularjs ×1
animation ×1
asp.net-mvc ×1
backbone.js ×1
jquery ×1
knockout.js ×1
meteor ×1
ngrx ×1