我有一个网站(asp.net mvc razor),其中一些功能需要授权/登录。 例如,可以通过单击按钮来启动这些功能。 通过单击此按钮,系统将检查用户是否已登录。 如果没有,则将用户重定向到他可以登录的登录页面。 之后,他将被重定向到初始页面,而不会启动用户操作。
所以工作流程如下:
- >第x页 - >按钮y - >点击 - >重定向到登录 - >登录 - >重定向到x。
重定向是简单的Url.Action()
语句。
我想要做的是动态重定向到点击来自的页面,理想情况下跳转到发件人选择器,以简化用户的工作。
我有什么可能实现这一目标?
我只会想到使用ViewBag
和strings
更新: 信息:由于存储会话变量导致有关并发请求的问题,因此该功能在解决方案范围内被禁用,因此我无法使用会话变量。 此外:主要问题之一是,如果不进行ajax调用或发送表单,我无法登录。通过发送表单或进行ajax调用,我放弃了有关动作的原始发起者和参数的信息。 我通过将其添加到控制器中的所有此类操作来解决此问题:
[HttpPost]
public ActionResult ActionA(Guid articleId, Guid selectedTrainerId)
{
//if user is not authenticated then provide the possibility to do so
if (!Request.IsAuthenticated)
{
var localPath = this.ControllerContext.RequestContext.HttpContext.Request.Url?.LocalPath;
var parameter = this.ControllerContext.RequestContext.HttpContext.Request.Params["offeringRateId"];
var returnUrl = localPath + "?articleId=" + parameter;
return PartialView("LoginForOfferingPreview", new LoginForOfferingPreviewViewModel
{
RequestUrl = returnUrl,
//this will be used in the view the request was initiated by in order to repeat the intial action (after login has been successfull)
Requester = OfferingPreviewRequester.CourseTrialAdd,
//this will be used in the view to initiate the request again
RequestParameters = new List<dynamic> { new { articleId = articleId },new { selectedTrainerId = selectedTrainerId }}
});
}
//actual action
SendBasketEvent(new CourseAddMessage
{
BasketId = BasketId,
OfferingRateId = articleId,
SelectedTrainerId = selectedTrainerId,
SelectedTime = selectedTime,
Participants = selectedParticipants,
CurrentDateTime = SlDateTime.CurrentDateTimeUtc(SlConst.DefaultTimeZoneTzdb),
ConnectionId = connectionId
}, connectionId);
return Json(JsonResponseFactory.SuccessResponse());
}
the hereby returned view for login contains following js code that is called if the login has been succesfull:
function onLoginFormSubmit(data) {
//serialize form containing username+pw
var datastring = $("#loginForm").serialize();
$.ajax({
type: "POST",
url: '@Url.Action("Login_Ajax","Account",new {area=""})',
data: datastring,
success: function (data) {
debugger;
// display model errors if sign in failed
if (!!!data.Success) {
$(".buttons-wrap").append('<span id="loginFormError" style="color:red;"></span>');
$("#loginFormError").append(data.ErrorMessage);
}
//call method of initiating view that will decide what to dow now
if (data.Success) {
var parametersObjectAsString = JSON.parse('@Html.Raw(JsonConvert.SerializeObject(Model.RequestParameters))');
window.onLoginForOfferingPreviewSuccess('@Model.RequestUrl', parametersObjectAsString, '@((int)Model.Requester)');;
}
},
error: function () {
}
});
}
这可以正常工作,因为长的sigining不会因用户名或pw错误而失败。
如果发生这种情况,视图会显示错误,但现在再次登录某些东西真的很奇怪:
起初看起来像第一次成功登录似乎很有效,但是窗口函数onLoginForOfferingPreviewSuccess
中的ajax调用将始终到达错误块,而无法告诉您原因。
Fiddler揭示了奇怪的http共振代码,如227,556或其他什么
THX