Tag: asp.net mvc 3

如何正确设置IIS 7应用程序池标识?

将我的网站部署到IIS7.5后,我发现了一个奇怪的行为:默认情况下,当应用程序池标识为ApplicationPoolIdentity (如IIS应用程序池标识中所推荐的那样), Ninject似乎被忽略,因为我在创建时遇到以下错误第一个控制器: System.InvalidOperationException:尝试创建类型为“..MainController”的控制器时发生错误。 确保控制器具有无参数的公共构造函数。 —> System.DirectoryServices.DirectoryServicesCOMException:发生操作错误。 我试图将IIS AppPool\ FullAccess授予包含该站点(包括所有子文件夹和文件)的文件夹,但这并没有改变任何内容。 但是,当我将应用程序池标识设置为任何域帐户(即使是简单的帐户,没有管理权限,以及没有对该站点的文件夹的任何访问权限)时,它仍然可以正常工作。 根据通过NuGet包设置MVC3应用程序教程安装Ninject。 我不确定,如果相关,该网站应该在具有Windows身份validation的域Intranet中工作。 因此,唯一的问题似乎是应用程序池标识。 至于我渴望使用推荐的方式,我希望拥有ApplicationPoolIdentity ,而不是域帐户。 这有什么用呢? 是否可以将所有这些混合在一起? 这是一个具有类似问题的SO线程: ASP.NET MVC 4 + Ninject MVC 3 =没有为此对象定义的无参数构造函数 。 但是根本没有合适的答案。 作为删除的评论建议,我尝试使用NetworkSerive作为身份。 它运作正常。 但是,我想这并不比非特权域帐户好多少。 编辑 突然发现另一个依赖:应用程序池标识用于sql server上的windows身份validation,但我希望在那里使用客户端用户的凭据。 根据评论 同意通过模拟可以使用经过身份validation的凭据访问远程SQL Server。 但是,仍然不清楚ApplicationPoolIdentity和Ninject的问题是什么。 在这个问题的最顶部提到的文章让我想到这可能是由于虚拟帐户没有用户配置文件这一事实造成的。 这个方面对我来说仍然不清楚,因为仍然可以使IIS使用LoadUserProfile属性加载用户配置文件。 如果虚拟帐户没有配置文件,我无法获取,IIS将加载什么? 有人说: IIS不会加载Windows用户配置文件,但某些应用程序可能会利用它来存储临时数据。 SQL Express是执行此操作的应用程序的示例。 但是,必须创建用户配置文件以将临时数据存储在配置文件目录或注册表配置单元中。 NETWORKSERVICE帐户的用户配置文件由系统创建,始终可用。 但是,通过切换到唯一的应用程序池标识,系统不会创建任何用户配置文件。 只有标准应用程序池(DefaultAppPool和Classic .NET AppPool)在磁盘上具有用户配置文件。 如果管理员创建新的应用程序池,则不会创建用户配置文件。 但是,如果需要,可以通过将“LoadUserProfile”属性设置为“true”来配置IIS应用程序池以加载用户配置文件。 我在serverfault.com上找到了以下主题: […]

将JSON字符串反序列化为c#对象

我的应用程序是在用C#编码的Asp.Net MVC3中。 这就是我的要求。 我想要一个以下格式的对象。当我反序列化Json字符串时,应该实现这个对象。 var obj1 = new { arg1=1,arg2=2 }; 使用以下代码后: string str = “{\”Arg1\”:\”Arg1Value\”,\”Arg2\”:\”Arg2Value\”}”; JavaScriptSerializer serializer1 = new JavaScriptSerializer(); object obje = serializer1.Deserialize(str); 我得到的对象即obje不作为obj1 在这个例子中,我的JSON字符串是静态的,但实际上JSON字符串将是动态生成的运行时,所以我将无法一直获得Arg1和Arg2。

如何在处理Json时修复循环引用错误

这个问题是我在这里的原始post的一部分获取数据到Extjs GridPanel 下面是我的控制器从sql db读取数据然后我试图将结果编码为JSON并将数据发送回我的gridview.js public JsonResult writeRecord() //public string writeRecord() { Response.Write(“Survey Completed!”); SqlConnection conn = DBTools.GetDBConnection(“ApplicationServices2”); string sqlquery = “SELECT Q1, Q2, Q3, Q4, Improvements, Comments FROM myTable”; SqlDataAdapter cmd = new SqlDataAdapter(sqlquery, conn); DataSet myData = new DataSet(); cmd.Fill(myData, “myTable”); conn.Open(); conn.Close(); return Json(myData, JsonRequestBehavior.AllowGet); //return myData.GetXml(); } 这就是问题所在,使用上面的代码,我在执行gridview.js时得到的gridview表没有数据,但如果我直接访问我的控制器的方法就像这样 http://localhost:55099/GridView/writeRecord 我收到这个错误, 序列化“System.Globalization.CultureInfo”类型的对象时检测到循环引用。 描述:执行当前Web请求期间发生未处理的exception。 […]

测试ModelState在asp.net mvc中始终有效

在测试控制器的操作时,ModelState始终有效。 public class Product { public int Id { get; set; } [Required] [StringLength(10)] public string Name { get; set; } [Required] public string Description { get; set; } [Required] public decimal Price { get; set; } } 和我的控制器。 public class ProductController : Controller { [HttpPost] public ActionResult Create(Product product) { if (ModelState.IsValid) { // […]

将querystring从/转换为对象

我有这个(简化的)课程: public class StarBuildParams { public int BaseNo { get; set; } public int Width { get; set; } } 我必须将它的实例转换为这样的查询字符串: “BaseNo=5&Width=100” 另外,我必须将这样的查询字符串转换回该类的对象中。 我知道这几乎就是一个模型绑定器所做的事情,但是在我的情况下我没有控制器上下文(一些在线程中运行的深埋类)。 那么,是否有一种简单的方法可以在没有控制器上下文的情况下转换查询字符串中的对象并返回? 使用模型绑定会很棒,但我不知道如何。

如何在.js文件中嵌入Razor C#代码?

必须嵌入javascript代码块 … 但是Razor代码不会在.js文件中包含的.js文件中编译。 如何使这项工作? 或者还有其他优雅的方式来产生类似的效果吗? 谢谢。

在WebGrid.column中使用HTML.ActionLink中的数据是不可能的?

我的ASP.NET MVC3测试应用程序中有以下WebGrid。 它显示了一个客户列表: @grid.GetHtml( tableStyle: “grid”, headerStyle: “head”, alternatingRowStyle: “alt”, columns: grid.Columns ( grid.Column(format: (item) => Html.ActionLink(“Edit”, “Details”, new { id = item.id })), grid.Column(“Address.CompanyName”), grid.Column(“Address.City”) ) ) 这里有趣的部分是我在第一列中添加的编辑链接。 我想使用客户帐号而不是简单的“编辑”测试。 但是,这给我带来了很多问题。 我试过了: grid.Column(format: (item) => Html.ActionLink(item.AccountNumber.ToString(), “Details”, new { id = item.id })), 但是,似乎有些东西我不明白这是如何工作的,因为我一直得到这个例外: CS1502: The best overloaded method match for ‘System.Web.Helpers.WebGrid.Column(string, string, System.Func, string, […]

使用Unity将依赖项注入自定义ActionFilter

目前,我有一个自定义ControllerFactory,我注入我的Unity容器: 在global.asax Application_Start()中: var container = InitContainer(); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); var factory = new UnityControllerFactory(container); ControllerBuilder.Current.SetControllerFactory(factory); 在控制器工厂中,我将控制器设置为使用自定义ActionInvoker,如下所示: protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) { var controller = base.GetControllerInstance(requestContext, controllerType) as Controller; if (controller != null) controller.ActionInvoker = new UnityActionInvoker(_container); return controller; } 最后在我的自定义ActionInvoker中,我尝试使用ActionInvokers容器构建调用的操作: protected override ActionExecutedContext InvokeActionMethodWithFilters( ControllerContext controllerContext, IList filters, ActionDescriptor actionDescriptor, IDictionary parameters) […]

如何将站点范围的无缓存标头添加到MVC 3应用程序

我构建了一个MVC3应用程序,应用程序有很多页面,现在因为我需要在http标头中添加无缓存设置的安全问题,是否有更简单的方法呢? 如果我们可以修改一个地方,那么它将适用于整个应用程序,它将是完美的。 你们能帮助我吗?

如何配置Simple Injector以在ASP.NET MVC中运行后台线程

我正在使用Simple Injector来管理我注入的依赖项的生命周期(在本例中为UnitOfWork ),我很高兴有一个单独的装饰器而不是我的服务或命令处理程序,在保存和处理之后,在编写业务时使代码更容易逻辑层(我遵循本博文中概述的架构)。 通过在构造根容器的构造过程中使用Simple Injector MVC NuGet包和以下代码,上面的工作完美(并且非常容易),如果图中存在多个依赖项,则相同的实例将全部注入 – 完美的entity framework模型上下文。 private static void InitializeContainer(Container container) { container.RegisterPerWebRequest(); // register all other interfaces with: // container.Register(); } 我现在需要运行一些后台线程,并从Simple Injector 文档中了解可以代理命令的线程 ,如下所示: public sealed class TransactionCommandHandlerDecorator : ICommandHandler { private readonly ICommandHandler handlerToCall; private readonly IUnitOfWork unitOfWork; public TransactionCommandHandlerDecorator( IUnitOfWork unitOfWork, ICommandHandler decorated) { this.handlerToCall = decorated; […]