我有一个从主网站发回的一些JSON帖子中使用的URL:
HTTP://site/Services/api.svc/UpdateItem
我们正在慢慢更新网站到ASP.Net MVC 2,并且不想破坏系统中的任何当前URL.(JavaScript刷新问题)
我删除了/Services/api.svc并将此API调用的逻辑移动到以下Controller中:
HTTP://网站/ LegacyApi /的updateItem
不幸的是,在添加路由时,我似乎无法覆盖api.svc并继续收到404错误.
路线:
routes.MapRoute(
"UpdateItemApi",
"Services/api.svc/UpdateItem",
new { controller = "LegacyApi", action = "UpdateItem" }
);
Run Code Online (Sandbox Code Playgroud)
根据MSDN对这个具体问题,路由应该通过.
非常感谢任何帮助.
标准.aspx页面的路由按预期工作,因此这似乎与.svc文件及其处理方式有关.
我在Global.asax中定义了几条路线;
当我在页面上时,我需要弄清楚当前路由的路由名称是什么,因为路由名称驱动我的站点菜单.
如何才能做到这一点?
我已经配置了一些在登录之前可供所有用户使用的基本路由:
App.config(function ($routeProvider) {
$routeProvider.
when('/login', { templateUrl: 'views/login.html', controller: PageStartCtrl.Controller }).
otherwise({ redirectTo: '/login' });
});
Run Code Online (Sandbox Code Playgroud)
所以用户唯一能做的就是登录.用户登录后,我想注册其他路由,如下所示:
$http
.post('api/Users/Login', { User: userName, Password: userPassword })
.success(function (response : any) {
App.config(function ($routeProvider) {
$routeProvider
.when('/dashboard',
{ templateUrl: 'part/dashboard.html',
controller: DashboardCtrl.Controller });
});
Run Code Online (Sandbox Code Playgroud)
但是,我想我应该只调用一次.config方法,因为$ routeProvider是一个对/ login route一无所知的全新实例.进一步的调试向我展示了在解析视图更改时使用$ resourceProvider的第一个实例.
问:以后如何注册路线?
从路由和模板动态添加到$ routeProvider的解决方案可能有效,但是非常难看(涉及全局变量nastyGlobalReferenceToRouteProvider
).
这是我的Angular2应用程序结构:
这是我的代码的一部分.以下是module
Angular2应用程序的主要内容,它导入其路由规则和子模块(EdgeModule
)并使用与某些页面相关的一些组件.
app.module.ts
@NgModule({
declarations: [
AppComponent,
PageNotFoundComponent,
LoginComponent
],
imports: [
...
appRouting,
EdgeModule
],
providers: [
appRoutingProviders,
LoginService
],
bootstrap: [AppComponent]
})
export class AppModule {
}
Run Code Online (Sandbox Code Playgroud)
以下是主模块的路由规则.它有登录页面和页面找不到的路径.
app.routing.ts
const appRoutes: Routes = [
{ path: 'login', component: LoginComponent },
{ path: '**', component: PageNotFoundComponent }
];
export const appRoutingProviders: any[] = [];
export const appRouting = RouterModule.forRoot(appRoutes, { useHash: true });
Run Code Online (Sandbox Code Playgroud)
这是EdgeModule
声明它使用的组件并导入自己的路由规则和2个子模块(FirstSectionModule
和SecondSectionModule
).
edge.module.ts
@NgModule({
declarations: [
EdgeComponent, …
Run Code Online (Sandbox Code Playgroud) url-routing nested-routes angular2-routing angular2-modules angular
我可以在AngularJS中设置路由参数的默认值吗?有没有办法拥有/products/123
和/products/
处理相同的路线?
我想重构我现有的代码,看起来像:
myModule.config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/products/', {templateUrl: 'products.html', controller: ProductsCtrl}).
when('/products/:productId', {templateUrl: 'products.html', controller: ProductsCtrl})
}]);
function ProductsCtrl($scope, $routeParams) {
$scope.productId = typeof($routeParams.productId) == "undefined" ? 123 : $routeParams.productId;
}
Run Code Online (Sandbox Code Playgroud)
它有效,但它不是很优雅.有没有更好的办法 ?
main.go
package main
import (
"net/http"
)
func main() {
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
http.ListenAndServe(":8080", nil)
}
Run Code Online (Sandbox Code Playgroud)
目录结构:
%GOPATH%/src/project_name/main.go
%GOPATH%/src/project_name/static/..files and folders ..
Run Code Online (Sandbox Code Playgroud)
即使在阅读完文档后,我也无法理解http.StripPrefix
这里究竟是做什么的.
1)localhost:8080/static
如果删除,为什么我无法访问http.StripPrefix
?
2)/static
如果删除该功能,哪个URL映射到文件夹?
我正在使用React构建Flask应用程序,我最终遇到了路由问题.
后端负责成为API,因此有些路由如下:
@app.route('/api/v1/do-something/', methods=["GET"])
def do_something():
return something()
Run Code Online (Sandbox Code Playgroud)
以及通往React的主要途径:
@app.route('/')
def index():
return render_template('index.html')
Run Code Online (Sandbox Code Playgroud)
我在React应用程序中使用react-router,一切正常,反应 - 路由器带我到/something
我得到渲染的视图,但是当我刷新页面/something
然后Flask应用程序负责这个调用,我得到Not Found
错误.
什么是最好的解决方案?我在想重定向这是不是要求所有的呼叫/api/v1/...
到/
它的效果并不理想,因为我将回到我的应用程序,而不是渲染的主页阵营视图.
Egghead教程教导它像这样:
var React = require('react');
var Router = require('react-router');
var routes = require('./config/routes');
Router.run(routes, function(Root){
React.render(<Root />, document.getElementById('app'));
});
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误:
未捕获的TypeError:Router.run不是函数
注意:我已经更新react-router
到最新版本.
这是我的情景.对于该示例,我们可以说我需要根据搜索条件返回汽车列表.我希望有一个View来显示结果,因为输出将是相同的,但我需要几种方法来实现.例如,我可能有一个带有文本框的表单按年搜索.我可能有另一个单独的页面,其中包含所有红色丰田汽车的超链接.如何在同一视图和控制器中处理这些多个方案.我的困境是搜索可能包含几个选项...年份,品牌,模型等,但我不知道在哪里放置它们.
对此最好的方法是什么?我应该在路由中定义参数还是使用查询字符串等?
有一种简单的方法可以让MvcRouteHandler将传入URL的操作和控制器部分中的所有连字符转换为下划线,因为方法或类名称不支持连字符.
这样我就可以支持像sample.com/test-page/edit-details这样的结构映射到Action edit_details和Controller test_pagecontroller,同时继续使用MapRoute方法.
我知道我可以指定一个动作名称属性并支持控制器名称中的连字符,这些连字符可以手动添加路由来实现这一点,但是我正在寻找一种自动化方式,以便在添加新控制器和操作时节省错误.