Когда пользователь выбирает что-то, к чему у него нет доступа, или переходит на страницу, к которой у него нет доступа, он перенаправляет его на страницу, которая говорит, что у него нет доступа. Я хотел бы справиться с этим по-другому. Используя модал вместо перенаправления.
Это контролируется в
protected override void OnActionExecuting(ActionExecutingContext context)
Поэтому, когда пользователь переходит на страницу, к которой у него нет доступа, перенаправляет
UnAuthoRedirect(context);
Это UnAuthRedirect
private void UnAuthoRedirect(ActionExecutingContext context)
{
//context.HttpContext.Response.Redirect(Url.Action("unauthorized", "Account"));
context.HttpContext.Response.Redirect("~/Error/AdminStatus");
}
У меня также есть Ajax вызовы на кнопках
@Ajax.ModalDialogActionLink("Edit", "Edit", "Addresses", "Edit", "btn btn-warning btn-sm", new { id = item.AddressUI })
Когда пользователь выбирает Ajax .ModalDialogActionLink, и у него нет разрешения на доступ к нему, выскакивает модал с "Ajax вызов не удался" Я хотел бы сказать пользовательскую ошибку.
Я пробовал это:
if (IsThisAjaxRequest() == true)//if userid !=null && Check Crud
{
//Equals("You do not have permission to this area");
Response.StatusCode = (int)HttpStatusCode.InternalServerError;
}
Но результат тот же.
Вот IsThisAjaxRequest ()
private bool IsThisAjaxRequest()
{
bool result = false;
var currentContext = new HttpContextWrapper(System.Web.HttpContext.Current);
if (currentContext.Request.Headers["X-Requested-With"] != null
&& currentContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
{
result = true;
}
return result;
}
Так что, если бы я мог настроить оба из них, чтобы просто выскакивать ту же ошибку, что было бы лучше, Если нет, тогда я сделаю то, что необходимо.
Если вам нужно что-то еще увидеть, просто дайте мне знать. Заранее спасибо.
ОБНОВЛЕНИЕ: добавлены ModalDialogExtensions
public static class ModalDialogExtensions
{
sealed class DialogActionResult : ActionResult
{
public DialogActionResult(string message)
{
Message = message ?? string.Empty;
}
string Message { get; set; }
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.Write("<script> window.location.assign('" + Message + "') </script>");
}
}
public static MvcHtmlString ModalDialogActionLink(this AjaxHelper ajaxHelper, string linkText, string actionName, string dialogTitle, string CssClass)
{
var dialogDivId = Guid.NewGuid().ToString();
return ajaxHelper.ActionLink(linkText, actionName, routeValues: null,
ajaxOptions: new AjaxOptions
{
UpdateTargetId = dialogDivId,
InsertionMode = InsertionMode.Replace,
HttpMethod = "GET",
OnBegin = string.Format(CultureInfo.InvariantCulture, "prepareModalDialog('{0}')", dialogDivId),
OnFailure = string.Format(CultureInfo.InvariantCulture, "clearModalDialog('{0}');alert('Ajax call failed')", dialogDivId),
OnSuccess = string.Format(CultureInfo.InvariantCulture, "openModalDialog('{0}', '{1}')", dialogDivId, dialogTitle)
}, htmlAttributes: new { @class = CssClass });
}
ОБНОВЛЕНИЕ:
Я понял, что единственная причина, по которой ссылка не будет работать, - это отсутствие доступа к ней. Поэтому я просто заменил текст вышеупомянутого «OnFailure» на
OnFailure = string.Format(CultureInfo.InvariantCulture, "clearModalDialog('{0}');alert('You are not authorized to access this area!')", dialogDivId)
Однако я все еще хочу использовать модальное всплывающее окно для UnAuthorized вместо перенаправления. Любые предложения будут полезны ..
ОБНОВЛЕНИЕ: Из того, что я прочитал в некоторых других сообщениях, это то, что вы будете делать перенаправление. Я также читал, что вы должны избегать перенаправлений в MVC решении. Поэтому я не уверен, что правильно, а что неправильно ..