问题描述
(已经尝试过其他解决方案,但是没有用)
我正在尝试使用“列表”和“对象”从“区域视图”到“区域控制器”执行JQuery POST请求,以将其保存到数据库中并返回带有结果(错误或数据)的匿名Json对象。
现在,当我在本地主机上尝试它时,它可以按预期工作,但是当我使用FTP发布项目并执行该请求时,什么也没发生,并返回403 Forbidden-Access Denied。我已经在一般路径中发出了另一个请求,而不是在本地主机上正常工作并已发布的区域中。
我的托管服务提供商说,这不是他的许可问题,所以我开始尝试一些东西,但直到现在我都无法解决。
https://i.stack.imgur.com/yg9P9.png
功能性:
$(document).ready(function () {
$.ajax({
url: "@Url.Action("GetNombre","Usuarios",new { Area = "" })",type: "POST",success: function (foo) {
$(".foo-class").html('Hola,' + foo.nombre + '!');
}
});
});
这是我不起作用的要求:
否函数(返回403):
$("form").submit(function (e) {
e.preventDefault();
//Initializing List
var lstContacto_Clientes = [];
$("div[id*='contacto-']").each(function () {
......
});
//Datos Cliente
var Cliente = {
......
}
$.post({
url: "@Url.Action("Crear","Clientes")",method: "POST",data: {
oClienteView: Cliente,lstContactoClientes: lstContacto_Clientes
},success: function (result) {
.....
},error: function (e) {
console.log('JSON Error');
console.log(e);
}
});
});
这是区域路由(这就是为什么我没有在“无功能请求”中指定区域)的原因:
context.MapRoute(
"Admin_Rout","Admin/AdminPanel/{action}/{id}",new { controller = "AdminPanel",action = "Index",id = UrlParameter.Optional }
);
context.MapRoute(
"Admin_default","Admin/{controller}/{action}/{id}",id = UrlParameter.Optional }
);
这是我的文件夹的分发方式:
https://i.stack.imgur.com/RlU8z.png
“客户端”控制器受以下过滤器的影响:
public class AutorizacionRolesAttribute : AuthorizeAttribute
{
private readonly string[] allowedroles;
public AutorizacionRolesAttribute(params string[] roles)
{
//De AutorizacionRoles(Roles="") recibe los valores de -Roles=""- y los guarda en un array de strings
this.allowedroles = roles;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool authorize = false;
//Recibe el ID del Usuario por la sesion
int? userId = (int?)httpContext.Session["SessionId"];
var token = httpContext.Session["token"];
//Chequea solamente si recibe UNICAMENTE el param "Token",ningun otro
//asi se chequea en la accion "Crear" si está habilitado
if (allowedroles[0] == "Token")
{
//Si NO esta vacio,devuevle TRUE
if(token != null)
return true;
}
//Chequea si userId es valido
if (userId > 0 && userId != null)
using (var db = new PBIEntities())
{
//Recibe el Rol del Usuario
var userRole = (from u in db.Usuarios
join r in db.Roles on u.rol equals r.ID_Rol
where u.id_usuario == userId
select new
{
r.Rol
}).FirstOrDefault();
//Chequea que el Rol del Usuario esté habilitado recorriendo allowedroles
foreach (var role in allowedroles)
{
if (role == userRole.Rol) return true;
}
}
return authorize;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "controller","Home" },{ "action","Index" },{ "Area","" }
});
}
}
public class AutorizacionSesion : ActionFilterattribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var sessionId = HttpContext.Current.Session["SessionId"];
var token = HttpContext.Current.Session["token"];
//Si NO hay sesion
if(sessionId == null)
{
//Si hay Token
if (token != null)
{
//Si el Controller es distinto de Usuarios
if (filterContext.Controller is UsuariosController == false)
{
//Devolver al Login
filterContext.HttpContext.Response.Redirect("~/Usuarios/Login");
}
} else {
//Si el Controlador es distinto de Usuarios
if (filterContext.Controller is UsuariosController == false)
{
//Devolver al login
filterContext.HttpContext.Response.Redirect("~/Usuarios/Login");
}
}
}
base.OnActionExecuting(filterContext);
}
}
编辑:(我在表单上使用 @ Html.AntiForgeryToken())
[HttpPost]
public ActionResult Crear(Clientes oClienteView,List<Contacto_Clientes> lstContactoClientes)
{
ViewBag.peticion = false;
ViewBag.error = false;
JSONRespuesta JSONresp = new JSONRespuesta();
try
{
if (ModelState.IsValid)
{
using (FOOEntities db = new FOOEntities())
{
using (DbContextTransaction transaction = db.Database.BeginTransaction())
{
try
{
.....
}
catch (Exception e)
{
transaction.Rollback();
JSONresp.error = true;
JSONresp.data = e.Message;
return Json(JSONresp,JsonRequestBehavior.AllowGet);
}
}
}
}
JSONresp.error = false;
JSONresp.op = "validacion";
JSONresp.data = ModelState.Values.SelectMany(e => e.Errors);
return Json(JSONresp,JsonRequestBehavior.AllowGet);
}
catch (Exception e)
{
JSONresp.error = true;
JSONresp.data = e.Message;
return Json(JSONresp,JsonRequestBehavior.AllowGet);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)