我正在尝试使用一个ASP.NET MVC应用程序...我应该知道这并不容易。前几页有效,但它们都是静态的。第一次执行Controller时,我得到以下异常。
以下是Controller操作方法:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index(Section? section, int? parent)
{
if (section == null)
{
return RedirectToAction("Index", "Questions", new {section = Section.Section0});
}
IPagedList<Question> questions = _surveyService.FetchQuestions(User.Identity.Name, section.Value, parent);
// ...
ViewResult result = View("Index", questions);
result.ViewData.Add("CurrentSection", section.Value);
result.ViewData.Add("Parent", parent);
result.ViewData.Add("IsLastPage", questions.IsLastPage);
return result;
}
在RedirectToAction()
的方法的第二行抛出异常。
背景:
我缺少什么让这项工作?
例外:
Server Error in '/surveys/objectification' Application.
Security Exception
Description: The application attempted to perform an operation not allowed by the security policy. To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file.
Exception Details: System.Security.SecurityException: That assembly does not allow partially trusted callers.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[SecurityException: That assembly does not allow partially trusted callers.]
SelfObjectificationSurvey.Web.Controllers.QuestionsController.Index(Nullable`1 section, Nullable`1 parent) +0
lambda_method(ExecutionScope , ControllerBase , Object[] ) +123
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24
System.Web.Mvc.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7()
+53
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +258
System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9()
+20
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +193
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
+382
System.Web.Mvc.Controller.ExecuteCore()
+123
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +23
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +144
System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +54
System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
+181
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
+75
Version Information: Microsoft .NET Framework Version:2.0.50727.3074; ASP.NET Version:2.0.50727.4049
答案 0 :(得分:2)
你的议会是strong-named吗?
AllowPartiallyTrustedCallersAttribute仅在程序集级别由强名称程序集应用时才有效。
答案 1 :(得分:2)
您可能想要检查的另一件事是,根据此article,有些.NET类型无法在部分受信任的程序集中使用,即使它已使用AllowPartiallyTrustedCallersAttribute进行了修饰。
有关完整列表,请参阅.NET Framework Assemblies and the AllowPartiallyTrustedCallers Attribute。
更新2 您确定要调用的所有第三方程序集也都使用AllowPartiallyTrustedCallers属性进行修饰吗?
例如,查看PagedList 1.1的AssemblyInfo.cs,它似乎不包含此属性。
更新1 :您说得对,无法使用的类型列表确实看起来过时了。
此LINQ to SQL常见问题解答包含一些有关其在部分信任环境中使用的有趣信息:
APTCA
Q值。是否标记了System.Data.Linq 部分受信任的代码?
一个。是的,System.Data.Linq.dll 程序集就是.NET Framework中的一部分 标有的组件 AllowPartiallyTrustedCallersAttribute程序 属性。没有这个标记, .NET Framework中的程序集是 仅供完全信任使用 代码。
LINQ to SQL中的主要场景 允许部分信任的呼叫者 是启用LINQ to SQL程序集 要从Web应用程序访问, 信任配置的位置 平台。
答案 2 :(得分:2)
逐个退出装配,看看罪魁祸首是谁。无需猜测。我在Microsoft企业库中遇到了这个问题。
答案 3 :(得分:1)
您可能需要完全信任模式才能运行代码。大多数主机只允许中等信任,GoDaddy也是如此。您可能需要将主机切换到另一个可以完全信任的主机。
虽然MVC本身不需要超过中等信任,但您的其他代码可能不需要。您可以在代码中的某处进行运行时类型检查,以便实现反射,反过来又需要完全信任。
答案 4 :(得分:0)
LINQ to SQL可能是问题 - LINQ to SQL通常会生成一个存储过程。如果您的代码试图以中等信任方式执行此操作,则可能导致APTCA异常。