我正在使用jQuery和jQuery.form插件来提交我的表单(也使用ASP.Net MVC).
问题是用户在网站的一部分中使用表单身份验证,如果他们的身份验证cookie在页面上的时间到期而不是返回状态302,这将是重定向到登录页面,我仍然得到200 ?
在FireBug中,我看到302 Found,然后我的登录页面接下来是200,这是发送回我的Ajax调用的状态代码.如果我从未看到302发送回jQuery表单插件,如何检测到它们已被注销?
我使用fetch来调用post服务,我收到错误Fetch API cannot load http://localhost:8080/user/login.预检的响应无效(重定向)'.Status code: 302 Found.变量'data'是一个jsonobject {email: "batman@dc.com", password: "111"}
fetch('http://localhost:8080/user/login', {
method: 'post',
body : JSON.stringify(data),
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
dataType : 'json'
})
Run Code Online (Sandbox Code Playgroud) 今天早上我在localhost的ASP.NET MVC 2站点上的一个CSS文件上返回302错误,我不知道会有什么改变导致这个.
localhost站点使用IIS 7.5,虽然我对IIS的经验有限,所以我没有太多关注那里可能发生的事情.
CSS文件的URL是:
http://localhost/MySite/Content/Site.css?v=16
Run Code Online (Sandbox Code Playgroud)
并且响应上的位置标头如下所示:
/MySite/Account/Login?ReturnUrl=%MySite%2fContent%2fSite.css%3fv%3d16&v=16
Run Code Online (Sandbox Code Playgroud)
这让我觉得MVC正在重定向静态文件或类似的东西,但是如果是这种情况,那么我希望我的所有图像,CSS和JavaScript文件都做同样的事情.以防万一,这是RegisterRoutes()Global.ascx 的简化版本:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("", "Account/{action}/", new { controller = "Account" });
routes.MapRoute("", "{action}", new { controller = "Home", action = "Index" });
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Error",
"{*url}",
new { controller = "Home", action = "ResourceNotFound" }
);
}
Run Code Online (Sandbox Code Playgroud)
此外,如果我将我的CSS文件的名称更改为Site2.css并引用它,则会发生同样的事情. …
我正在尝试进行HTTP 302重定向,但在调试模式下运行时遇到以下异常.
Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack
Run Code Online (Sandbox Code Playgroud)
var response = HttpContext.Current.Response;
response.Clear();
response.Status = "302 Found";
response.AddHeader("Location", "http://google.com");
response.End();
response.Flush();
Run Code Online (Sandbox Code Playgroud)
长话短说,这个电话不是冲洗响应而不是重定向.
我怎样才能使这个工作?
我对Safari处理CORS请求的方式有疑问.考虑以下场景:
这适用于Chrome,FF,但它在Safari上失败(在Mozilla/5.0(Macintosh; Intel Mac OS X 10_10_5)AppleWebKit/600.8.9(KHTML,如Gecko)版本/ 8.0.8 Safari/600.8.9上测试).
当我在没有打开xhr.withCredentials的情况下发出请求时,首先,Safari会在向DomainC提出实际请求之前发出OPTIONS预检请求,因为所有请求都是简单请求,但我可以处理这个请求.问题是Safari在对DomainC的预检请求说"无法从null发出任何请求"后失败.我可以通过将Access-Control-Allow-Origin设置为*并删除Access-Control-Allow-Credentials标头(这些是互斥的)来绕过这一点,这将使这种情况起作用.但是我仍然认为这不是正确的行为.
现在,事情是我需要传递凭据(并且不,我不能以其他方式传递它,因为它依赖于某些第三方服务器).那么,让我们来吧
xhr.withCredentials
为true,我们回到"无法从null发出任何请求",现在甚至通配符访问控制允许凭证也无济于事.
我认为所有CORS标头都设置正确,但请随时查看我.测试示例可以在这里找到:http://a.ihatesafari.com
这里发生了什么?这是一个错误还是我错过了什么?
谢谢你的回答
我正在尝试使用spring rest模板来发布登录请求.
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
LinkedMultiValueMap<String, Object> mvm = new LinkedMultiValueMap<String, Object>();
mvm.add("LoginForm_Login", "login");
mvm.add("LoginForm_Password", "password");
ResponseEntity<String> result = restTemplate.exchange(uriDWLogin, HttpMethod.POST, requestEntity, String.class);
Run Code Online (Sandbox Code Playgroud)
我的ResponseEntity状态是302,我想跟随此请求获取正文响应,因为我没有获得此请求的正文.
18:59:59.170 MAIN [http-nio-8080-exec-83] DEBUG c.d.s.c.DemandwareCtlr - loginToSandbox - StatusResponse - 302
18:59:59.170 MAIN [http-nio-8080-exec-83] DEBUG c.d.s.c.DemandwareCtlr - loginToSandbox - BodyResponse -
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个问题?
如何重现这个问题
如果任这些条件不符合,它的工作原理.
.
Load: function (in_url, in_cb, in_responseType) {
var xhr = new XMLHttpRequest();
xhr.open('GET', in_url, true);
xhr.onload = function () {
if (xhr.status === 200) {
in_cb(null, xhr.response);
} else {
in_cb(new Error('[Loader] Could not fetch from: '+in_url+', status: '+xhr.status));
}
};
xhr.onerror = function (error) {
in_cb(error);
};
xhr.send();
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我在尝试找出如何HTTP 302 Found从控制器内重定向()到绝对URL 时遇到了很多麻烦.
我试过这个:
this.Redirect("/assets/images/avatars/profile.jpg");
Run Code Online (Sandbox Code Playgroud)
但我得到一个异常抛出
抛出异常:System.dll中的"System.UriFormatException"
附加信息:无效的URI:无法确定URI的格式.
我在这里看到的每一个答案似乎都不适合我.我正在使用Web API和MVC 5.
c# asp.net-mvc redirect http-status-code-302 asp.net-web-api
这是我的堆栈:
f.com)b.com)我在开发环境中执行此操作,我使用create-react-app通过命令运行我的前端服务器npm start。我想使用 处提供的 SSO 执行身份验证sso.example.com/login。理想情况下,只要在未经适当授权的情况下向后端服务器发出请求,就会通过 HTTP 302 重定向到 SSO 页面进行响应。所以顺序是:
b.com/userssso.example.com/login")响应sso.example.com,我无法控制添加Access-Control-Allow-Origin:*响应标头如何成功重定向我的 GET 请求?
我使用 spring security,它将未经身份验证的用户重定向到登录页面。
因此,当未经身份验证的 Angular 客户端向端点(期望 JSON)发送 GET 请求时,它接收到登录页面的 HTML 内容,并且 JSON 解析器失败(Angular2 watch for 302 redirect when fetching resource)
const httpObservable = this.http.get(urlThatWillRedirect).subscribe(data => ...) // JSON parser will fail
Run Code Online (Sandbox Code Playgroud)
如何在 Angular 中处理重定向?