让我们假设我有一些页面
some.web/articles/details/5some.web/users/info/bobsome.web/foo/bar/7可以调用常见的实用程序控制器
locale/change/es 要么 authorization/login
如何获得这些方法(change,login)重定向到以前的行为(details,info,bar),而通过前面的参数给他们(5,bob,7)?
简而言之:如何在另一个控制器中执行操作后重定向到我刚刚访问过的页面?
在Angular 1.x中,我可以执行以下操作来创建一个基本上什么都不做的链接:
<a href="">My Link</a>
Run Code Online (Sandbox Code Playgroud)
但是相同的标签会导航到Angular 2中的应用程序库.
与Angular 2相同的是什么?
编辑:
它看起来像Angular 2路由器中的一个错误,现在github上存在一个未解决的问题.
我正在寻找一个开箱即用的解决方案或确认没有任何问题.
我想补充一些链接我Angular2页面上,当点击,将跳转到特定位置内该页面,像什么正常的井号标签做.所以链接会是这样的
/users/123#userInfo
/users/123#userPhoto
/users/123#userLikes
Run Code Online (Sandbox Code Playgroud)
等等
我不认为我需要HashLocationStrategy,因为我对正常的Angular2方式很好,但是如果我直接添加,链接实际上会跳转到根目录,而不是同一页面上的某个地方.任何方向表示赞赏,谢谢.
我想尝试一些非常基本的运行.我已经习惯了CI,现在正在学习Laravel 4,他们的文档并不容易!无论如何,我正在尝试创建一个登录表单,并确保通过在下一个表单中打印它来成功发布数据.我得到这个例外:
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
和我的MemberController.php:
public function index()
{
if (Session::has('userToken'))
{
/*Retrieve data of user from DB using token & Load view*/
return View::make('members/profile');
}else{
return View::make('members/login');
}
}
public function validateCredentials()
{
if(Input::post())
{
$email = Input::post('email');
$password = Input::post('password');
return "Email: " . $email . " and Password: " . $password;
}else{
return View::make('members/login');
}
}
Run Code Online (Sandbox Code Playgroud)
和路线有:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
Run Code Online (Sandbox Code Playgroud)
最后我的观点login.php有这个表单方向:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
我的路线配置正确,我的方法有装饰标签.我仍然得到"请求的资源不支持HTTP方法'GET'"消息?
[System.Web.Mvc.AcceptVerbs("GET", "POST")]
[System.Web.Mvc.HttpGet]
public string Auth(string username, string password)
{
// Décoder les paramètres reçue.
string decodedUsername = username.DecodeFromBase64();
string decodedPassword = password.DecodeFromBase64();
return "value";
}
Run Code Online (Sandbox Code Playgroud)
这是我的路线:
config.Routes.MapHttpRoute(
name: "AuthentificateRoute",
routeTemplate: "api/game/authentificate;{username};{password}",
defaults: new { controller = "Game",
action = "Auth",
username = RouteParameter.Optional,
password = RouteParameter.Optional },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { controller = "Home", id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud) 有没有办法在单个函数调用上进行此操作?
var todo = function (req, res){};
app.get("/", todo);
app.get("/blabla", todo);
app.get("/blablablabla", todo);
Run Code Online (Sandbox Code Playgroud)
就像是:
app.get("/", "/blabla", "/blablablabla", todo );
Run Code Online (Sandbox Code Playgroud)
我知道这是一个语法混乱,但只是想知道我想要实现什么,一系列的路线将是真棒!
有人知道怎么做吗?
我想做一个重定向来完成整页重新加载,以便在页面加载时刷新我的Web服务器中的cookie.window.location = "/#/Next"并且window.location.href = "/#/Next"不工作,他们做一个没有命中服务器的Angular路线.
在Angular控制器中发出完整服务器请求的正确方法是什么?
我在Global.asax中有默认路由:
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
我希望能够定位特定的功能,所以我创建了另一条路线:
RouteTable.Routes.MapHttpRoute(
name: "WithActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
所以,在我的控制器中,我有:
public string Get(int id)
{
return "object of id id";
}
[HttpGet]
public IEnumerable<string> ByCategoryId(int id)
{
return new string[] { "byCategory1", "byCategory2" };
}
Run Code Online (Sandbox Code Playgroud)
打电话.../api/records/bycategoryid/5会给我我想要的东西.但是,通话.../api/records/1会给我错误
找到了与请求匹配的多个操作:...
我明白为什么那就是-航线只是定义哪些URL是有效的,但是当涉及到的功能匹配,都Get(int id)和ByCategoryId(int id)比赛api/{controller}/{id},这是混淆了框架.
我需要做些什么才能让默认的API路由再次运行,并保持一个{action}?我想创建一个名为RecordByCategoryIdController匹配默认API路由的不同控制器,我会请求它.../api/recordbycategoryid/5.但是,我发现这是一个"脏"(因此不令人满意)的解决方案.我已经找到了这方面的答案,没有关于使用路线{action}甚至提到这个问题的教程.
尽管在这里和其他地方有几个类似的问题,但我一直无法找到解决这个问题的可行办法.Rails 3似乎没有回答这个问题,所以这里有:
我有一个应用程序,当前允许用户创建自己的子域,其中包含他们的应用程序实例.在Rails 2中,你最好使用subdomain-fu gem,在版本3中它显然更简单,根据Railscast - http://railscasts.com/episodes/221-subdomains-in-rails-3.
这是好事,但我也希望为用户提供将自己的域名与其帐户相关联的选项.因此,虽然他们可能有http://userx.mydomain.com,但我希望他们选择将http://userx.com关联起来.
我在Rails 2中找到了一些参考,但这些技术似乎不再起作用了(特别是这一个:http://feefighters.com/devblog/2009/01/21/hosting-multiple-domains-from -a-single-rails-app /).
任何人都可以推荐一种方法来使用路由接受任意域并将其传递给控制器,以便我可以显示相应的内容?
更新:我现在得到了大部分答案,感谢Leonid的及时回复,以及对代码的全新审视.它最终需要添加我正在使用的现有子域代码(来自Railscast解决方案),然后向routes.rb添加一些内容.我还没到那里,但我想发布到目前为止我所拥有的内容.
在lib/subdomain.rb中:
class Subdomain
def self.matches?(request)
request.subdomain.present? && request.subdomain != "www"
end
end
class Domain
def self.matches?(request)
request.domain.present? && request.domain != "mydomain.com"
end
end
Run Code Online (Sandbox Code Playgroud)
我已经添加了第二类模仿第一类,这是已知的工作.我只是添加一个条件,确保传入的域不是我主持主站点的域.
此类用于routes.rb:
require 'subdomain'
constraints(Domain) do
match '/' => 'blogs#show'
end
constraints(Subdomain) do
match '/' => 'blogs#show'
end
Run Code Online (Sandbox Code Playgroud)
在这里,我在前面添加现有的子域代码(再次,它工作正常)和一个节来检查域.如果此服务器响应该域并且它不是主站点运行的域,则转发到指定的控制器.
虽然这似乎有效,但我还没有完成整个工作,但我认为这个问题已经解决了.
我希望我的网址使用破折号-而不是下划线_作为单词分隔符.例如,controller/my-action而不是controller/my_action.
我对两件事感到惊讶:
-到_路由.或者是吗?我将使用的最佳解决方案:as或命名路线.
我的想法是修改Rails路由以检查该全局配置并在分派到控制器操作之前更改-为_.
有没有更好的办法?