Tag: asp.net mvc 5

是否可以禁用身份validation过滤MVC 5控制器中的一个操作?

[AuthenticateUser] public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { return View(); } [AllowAnonymous] public ActionResult List() { return View(); } } 如何删除名为List的操作的身份validation? 请指教…. 我的自定义filter编码如下..我也inheritance了FilterAttribute调用。 请告知 public class AuthenticateUserAttribute: FilterAttribute, IAuthenticationFilter { public void OnAuthentication(AuthenticationContext context) { if (this.IsAnonymousAction(context)) { } if (user == “user”) { // do nothing } […]

升级到Web API 2后,HttpApplication.Application_Start未触发

我将应用程序升级到Web Api 2,并且Application_Start不会触发在IIS Express上运行的升级后升级。 我的确遵循官方升级路径http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to- aspnet-mvc-5-and-web-api-2并检查了我的设置。 该应用程序使用StructureMap MVC 4来注入依赖项。 因此,WebActivator的PreApplicationStartMethod被触发,依赖项解析器被正确设置。 之后,无法追踪其他执行。 我启用了编辑并继续,但是在Application_Start的开头没有命中断点。 以下是我尝试过的所有内容: 禁用PreApplicationStartMethod并运行应用程序b。 更改Global.asax的编译设置和c后面的代码。 创建另一个具有类似结构的WebApi2项目,并设置减去实际代码,并且工作正常 我已经清理并运行了应用程序; 还清理了Temp ASP.NET文件夹 感谢帮助解决这个问题。

使用属性路由时是否可以更改路由表中的路由顺序?

所以,我正在将区域从使用AreaRegistration切换到使用属性路由。 我遇到的问题似乎是由路由加载到路由表中的顺序引起的。 我通过最后加载有问题的路由解决了AreaRegistration中的问题,这样只有当所有其他路由不匹配时才会匹配该路由。 使用属性路由,这似乎不可能。 我在创建路由时有Order参数,但这不会影响路由表的方式,除非非常狭窄。 这是我在AreaRegistration文件中的路由: context.MapRoute( name: “ActionItems_home”, url: “ActionItems/{group}/{statuses}/{overdueOnly}”, defaults: new { controller = “Home”, action = “Index”, group = “All”, statuses = “New,Open”, overdueOnly = false }, namespaces: new string[] { “IssueTracker.Areas.ActionItems.Controllers” } ); 现在,当我尝试将其切换到属性路由时,唯一接近工作的是: [Route(“”, Order = 4)] [Route(“{group:regex(^(?!Item|DecisionLogs))?}”, Order = 3)] [Route(“{group:regex(^(?!Item|DecisionLogs))}/{statuses=New,Open?}”, Order = 2)] [Route(“{group:regex(^(?!Item|DecisionLogs))}/{statuses=New,Open}/{overdueOnly:bool=false?}”, Order = 1)] 请注意,我必须放入正则表达式,因为否则不会调用Item控制器 […]

如何在IIS 8上运行应用程序时委派Windows身份validation会话?

我在ASP.Net MVC 5 Framework的顶部用c#编写了一个内部网应用程序。 我的应用程序配置为通过“Windows身份validation”方法对用户进行身份validation。 此应用程序在IIS 8上运行。 我的应用使用第三方SDK与我在同一域上运行的另一个程序进行交互。 此第三方应用程序允许用户也通过提供的SDK使用Windows身份validation登录。 问题 但是SDK与之通信的服务器始终返回“无效的用户名/密码无效”。 经过深入的故障排除后,我发现IIS没有返回正确的用户名。 它不是返回“Authenticated User”,而是返回正在运行pool app的用户。 因此,要解决此问题,我将应用设置更改为以下内容 我禁用了“匿名身份validation” 我启用了“Windows身份validation” 我启用了“ASP.NET模拟”,而“ASP.NET模拟”设置被设置为“经过身份validation的用户”。 注意:由于某种原因,这需要“经典”托管管道而不是“集成”。 我将AppPool管理的管道设置更改为“Classic”v4 将运行AppPool的用户更改为“网络服务”而不是“ApplicationPoolId” 然后将身份validation提供程序列表保留为“Negotiate”和“NTLM” 最后,我保持启用“Kernal模式身份validation”。 所以上面的设置返回了正确的用户名,但是它没有将密码委托给SDK。 我想因为通信滚刀,IIS正在保护登录用户,并且它不允许我将密码委托给另一个服务/ SDK。 那么我尝试将我的设置更改为以下内容 我将AppPool管理的管道设置更改为“Integrated”v4.0 将运行AppPool的用户更改为“网络服务” 我禁用了“匿名身份validation” 我启用了“Windows身份validation” 我禁用了 “ASP.NET模拟” 身份validation提供程序列表“协商:Kerberos”,“协商”和“NTLM” 我禁用了“Kernal模式身份validation”,因为它不能与“Kerberos”提供程序一起使用。 所以上面阻止我完全登录我的MVC应用程序,它只是不断地提示我一遍又一遍地提取我的凭证。 为了解决这个问题,我将我的web服务器名称放在我的域控制器中,然后我转到“委派”选项卡并将其更改为“信任此用户以便委派任何服务(仅限Kerberos)” 没有这个设置,允许我登录我的MVC应用程序。 但这一次,它既没有将用户名或密码委托给SDK。 实际上,我获得的用户名是PoolApp用户名而不是经过身份validation的用户。 为了涵盖我的所有基础,我将AppPool用户更改为对SDK所连接的服务器具有Windows身份validation访问权限的实际用户。 果然工作得很好,我能够连接到第二个服务。 但是, 始终将运行AppPool的用户名/密码委派给SDK,而不是委派连接/validation的用户名/密码。 总之,IIS不会出于某种原因将用户名/密码委托给SDK。 如何让IIS将连接的用户会话/凭证委派给其他服务? 由于用户正在使用“NTLM”身份validation而不是Kerberos,因此委派也可能失败,但服务器将仅在Kerberos身份validation时委派“如果是这种情况,我该如何强制用户使用”Kerberos “身份validation而不是”NTLM?

在mvc5中使用MvcSiteMap创建面包屑

我想在mvc5中使用MvcSiteMap创建面包屑。 我在下面写了代码。 但我希望当我点击第一,第二,……他们的Id传递给View。 但它不起作用。 我做对了吗? //Controller Name=News Home News first //id=1 second //id=2 third // id=3 About [MvcSiteMapNode(Title = “News”, ParentKey = “News”)] public ActionResult News(int id) { ViewBag.id = id; return View(); }

使用Ninject在我的存储库类中设置DBContext的连接字符串

我有一个使用EF 6的MVC 5应用程序,并使用DI容器Ninject实现具有dependency injection的Repository模式。 dbcontext的连接字符串存储在EF Context正确找到的Web.config文件中。 一切正常。 最近,我要求需要在运行时确定与我的DBContext的连接并连接到不同的数据库(但具有完全相同的结构)。 因此,我需要在实例化存储库之前在运行时从实体连接字符串更改sql connectionstring部分。 我真的很感激帮助。 我不是DI大师; 知道足够的Ninject让我的事情继续下去。 这是我的存储库基础接口: public interface IRepositoryBase where T : class { void Add(T entity, string userGuid = “”); void Delete(T entity); // … removed other method signatures for brevity } 我的存储库基础实现: public abstract class RepositoryBase : IRepositoryBase, IDisposable where T : class where D […]

动态MVC RadioButton组选择的答案

我有一个动态填充的问题和答案列表。 两个问题: 回发后不显示问题和答案 缺少所选答案 视图模型 public class RegistrationViewModel : RegisterExternalLoginModel { //…etc… public Question Question { get; set; } public Answer Answer { get; set; } public List Questions { get; set; } public IList PossibleAnswers { get; set; } public List SelectedAnswers { get; set; } public IList PreviousAnswers { set { foreach(Question q […]

ASP.NET MVC StackOverflowException从布局中的xml加载动态菜单

我尝试在我的布局中放置一个动态菜单(从xml加载),但我在PartialController.cs / MainMenu()中有一个StackOverflowException 我不明白为什么我的代码抛出StackOverflowException,因为我没有循环(或者我没有看到它!)。 Layout.cshtml: …. @if (Request.IsAuthenticated) { Html.RenderAction(“MainMenu”, “Partial”); } …. MainMenu.cshtml: @model Geosys.BoT.Portal.POC.Business.Menu @foreach (var item in Model.Nodes) { @item.Name @foreach (var subItem in item.Links) { @Html.ActionLink(subItem.Name, subItem.Action, subItem.Controller) } } PartialController.cs: [ChildActionOnly] public ActionResult MainMenu() { var menu = new Menu { Nodes = new List() }; var xmlData = System.Web.HttpContext.Current.Server.MapPath(“~/Content/navigation.xml”); […]

如何在viewmodel中创建可选的是/否单选按钮

假设我有很长的forms,用户可以输入许多不同的可选值。 其中一个可选值是布尔值。 根据用户输入,我需要在我的数据库中执行以下操作: 如果“是”,则在数据库中添加“1” 如果为“否”,则在数据库中添加“0” 如果输入non,则在数据库中添加“null” 但是,我能找到的最正常的viewmodel / razor代码如下: @Html.LabelFor(m => m.FurnitureIsIncluded) @Html.RadioButtonFor(model => model.FurnitureIsIncluded, true) Ja 这里我的值将为false,作为布尔值的默认值。 在MVC中解决这个问题的方法是什么?

模拟会话在MVC 5中不起作用

我正在我的控制器中的Session中存储值正在测试的Action。 我已经阅读了几篇关于如何模拟会话的文章,我正在尝试实现Milox 在unit testing中设置httpcontext当前会话的答案。 但是当我钻进Locals | this | base | HttpContext Locals | this | base | HttpContext 当设置Session变量HttpContext.Session[“BsAcId”] = vM.BusAcnt.Id; Locals | this | base | HttpContext Sessions仍为null并且测试失败,并带有Null ReferenceexceptionHttpContext.Session[“BsAcId”] = vM.BusAcnt.Id; 这是工作生产代码。 vM.BusAcnt.Id返回一个有效的int ,如果我用int值替换它,测试仍然失败,因为Session为null,因此没有值可以存储在其中。 我正在使用MVC5,EF6以及最新版本的xUnit,Moq和Resharper测试运行器。 行动: public ActionResult Details(int id) { var vM = new BusAcntVm(); vM.BusAcnt = _db.BusAcnts.FirstOrDefault(bA => bA.Id == id); if […]