【问题标题】:SecurityException: Request failed. - Entity Framework Code First (Sql Compact 4)SecurityException:请求失败。 - 实体框架代码优先(Sql Compact 4)
【发布时间】:2011-07-14 23:16:22
【问题描述】:
  1. 我创建了一个具有以下类的程序集 (dll)

Person.cs

[Table("People")]
public class Person
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }

}

DataContext.cs

public class DataContext : DbContext
{
    public DbSet<Person> People { get; set; }

    public DataContext()
        : base("name=DataConnection")
    {

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        base.OnModelCreating(modelBuilder);
    }
}

Calc.cs

public class Calc
{
    public int Sum(int num1, int num2)
    {
        return num1 + num2;
    }
}

使用 Nuget 安装以下包:

安装包 EFCodeFirst.SqlServerCompact

  1. 我创建了一个新的站点 MVC 3

我添加了对先前创建的 dll 引用

我在HomeController上修改了以下操作

HomeController.cs

public ActionResult Index()
{
    ViewBag.Message = "Sample Security Error";
    return View();
}

public ActionResult Sum(int num1, int num2)
{
    ViewBag.Message = "Sample Security Error";
    return View("Index", num1 + num2);
}

添加了一个新的控制器

PeopleController.cs

public ActionResult Index()
{
    using (var db = new DataContext())
    {
        var people = from p in db.People
                        select p;

        return View(people.ToList());
    }
}

我用以下代码更改了View/Home

Index.cshtml

@model int?
@{
    ViewBag.Title = "Home Page";
}

<h2>@ViewBag.Message</h2>
@Html.ActionLink("Sum", "Sum", new { num1 = 2, num2 = 4})
@if (Model.HasValue)
{ 
    <p>The value is: @Model.Value</p>
}
else
{ 
    <p>No value</p>
}

View/People

Index.cshtml

@model IEnumerable<Error.SecurityException.Model.Person>
@{
    ViewBag.Title = "People";
}

<h2>@ViewBag.Title</h2>
<ul>
@foreach (var item in Model)
{
    <li>@item.Name</li>
}
</ul>

在 Web.config 中我添加了连接字符串

<connectionStrings>
  <add name="DataConnection" connectionString="Data Source=|DataDirectory|Data.sdf;" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>

App_Data 文件夹创建了数据库Data.sdf,其结构与Person.cs 类相同。

使用 Nuget 安装以下包:

安装包 EFCodeFirst.SqlServerCompact

结果

本地 IIS 中的代码运行良好!

总和

显示人物

错误

当我发布网站时,在尝试显示人员时,会显示一条安全错误消息;

System.Security.SecurityException:请求失败。

总和值正常完成!

我发布了项目this地址。

点击People菜单可以看到错误!

压缩示例项目并发布在this address

感谢您的帮助!

【问题讨论】:

标签: asp.net-mvc-3 razor ef-code-first security sql-server-ce-4


【解决方案1】:

由于我无法打开您的解决方案,因为它配置为在 IIS 中运行...您可以添加吗?

<trust level="Medium"/> 

在您的本地项目 web.config(在 system.web 下)并在本地运行它?你得到同样的错误吗?如果你这样做,这是一个部分信任问题!

马特

【讨论】:

  • 本地完美运行!更改为 &lt;trust level="Medium"/&gt; 并且错误仍然存​​在。有趣的是,错误只发生在这个主机上。将网站托管在另一台主机上,它运行良好。但我不得不添加代码行&lt;trust level="Medium"/&gt;
【解决方案2】:

此错误已在 Entity Framework 4.1 版中修复! 这是他们的实体框架CF的一个错误

【讨论】:

    【解决方案3】:

    我来这里是为了寻找在我自己的 ASP.Net MVC 应用程序中被触发的安全异常。虽然我的问题可能不完全相同(它在运行任何调用 DbContext 的页面时引发 System.Configuration.ConfigurationPermission),但我找到了一个适用于许多情况的简单解决方案。我更改了我的 web.config,在自定义部分添加了一个 requirePermission="false",如下所示:

      <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    

    希望这可以帮助遇到同样问题的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多