Tag: asp.net core mvc

用于Mongodb数据存储的asp.net核心中基于令牌的简单身份validation/授权

我需要实现非常简单的auth mechanizm,基本上有2个角色: Owners和Users 。 而且我认为拥有Enum就足够了。 应用程序本身是SPA,通过Asp.net核心实现webapi。 我看到了文章 – 如何使用EF Identity实现它,但是他们的模型看起来比我实际需要的复杂得多,并且EF面向SQL db,我使用mongo。 所以我的用户看起来像: class UserModel{ Id, Token, Roles: [“Owners”, “Users”], … } 那么我需要实现哪些接口并添加到DI才能使用[Authorize]和[Authorize(Roles=”Users”)]属性,它们是否能够根据我在标头中发送的令牌正确工作?

将复杂对象存储在TempData中

我一直试图通过使用TempData重定向后将数据传递给一个动作,如下所示: if (!ModelState.IsValid) { TempData[“ErrorMessages”] = ModelState; return RedirectToAction(“Product”, “ProductDetails”, new { code = model.ProductCode }); } 但不幸的是,它失败了以下消息: ‘ System.InvalidOperationException : Microsoft.AspNet.Mvc.SessionStateTempDataProvider’无法将类型为’ModelStateDictionary’的对象序列化为会话状态。 我在Github的MVC项目中发现了一个问题,但是虽然它解释了为什么我收到这个错误,但我看不出什么是可行的替代方案。 一种选择是将对象序列化为json字符串,然后将其反序列化并重新构建ModelState 。 这是最好的方法吗? 我需要考虑哪些潜在的性能问题? 最后,是否有任何替代方法可以序列化复杂对象或使用其他不涉及使用TempData ?

如何在asp.net核心上传文件?

如何使用Asp.net MVC 6上传文件或图像以及一些模型数据? 例如,我有一个这样的表格; 我阅读了很多关于如何上传的教程,但我没有看到任何上传的内容与上面的表格一样。 另外,是否有任何用于重新resize和图像水印的图像处理库,与Codeigniter图像处理类相同? ( https://codeigniter.com/user_guide/libraries/image_lib.html

覆盖ASP.NET Core MVC 1.0中的全局授权filter

我试图在ASP.NET Core 1.0(MVC 6)Web应用程序中设置授权。 更严格的方法 – 默认情况下,我希望将所有控制器和操作方法限制为具有Admin角色的用户。 所以,我正在添加一个全局授权属性,如: AuthorizationPolicy requireAdminRole = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .RequireRole(“Admin”) .Build(); services.AddMvc(options => { options.Filters.Add(new AuthorizeFilter(requireAdminRole));}); 然后我想允许具有特定角色的用户访问具体的控制器。 例如: [Authorize(Roles=”Admin,UserManager”)] public class UserControler : Controller{} 这当然是行不通的,因为“全局filter”不允许UserManager访问控制器,因为它们不是“管理员”。 在MVC5中,我能够通过创建自定义授权属性并将我的逻辑放在那里来实现这一点。 然后使用此自定义属性作为全局。 例如: public class IsAdminOrAuthorizeAttribute : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { ActionDescriptor action = filterContext.ActionDescriptor; if (action.IsDefined(typeof(AuthorizeAttribute), true) || action.ControllerDescriptor.IsDefined(typeof(AuthorizeAttribute), true)) […]

ASP.NET Core 2.0禁用自动挑战

将ASP.NET Core项目升级到2.0后,尝试访问受保护的端点不再返回401,而是重定向到(不存在的)端点以尝试让用户进行身份validation。 所需的行为是应用程序只是返回401.以前我会在配置身份validation时设置AutomaticChallenge = false ,但根据这篇文章 ,设置不再相关(实际上它不再存在)。 我的身份validation配置如下: Startup.cs.ConfigureServices(): services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(o => { o.Cookie.Name = options.CookieName; o.Cookie.Domain = options.CookieDomain; o.SlidingExpiration = true; o.ExpireTimeSpan = options.CookieLifetime; o.TicketDataFormat = ticketFormat; o.CookieManager = new CustomChunkingCookieManager(); }); 配置(): app.UseAuthentication(); 如何禁用自动质询,以便在用户未通过身份validation时应用程序返回401?

使用viewmodel中的列表将字典绑定到复选框

你如何正确地绑定一个字典和它的每个键的值复选框? 我可以在HTTPGET中显示它们,但是再次将所选值绑定到HTTPPOST似乎不起作用。 视图模型 public class EditViewModel { public Foo Foo { get; set; } public Dictionary<Bar, List> Matrix { get; set; } } public class BarVersionEditVM { public int ID { get; set; } public string Name { get; set; } public string Version { get; set; } public bool IsSupported { get; set; } […]

从.net核心中的appsettings.json获取价值

不知道我在这里缺少什么,但我无法从我的.net核心应用程序中的appsettings.json获取值。 我的appsettings.json为: { “AppSettings”: { “Version”: “One” } } 启动: public class Startup { private IConfigurationRoot _configuration; public Startup(IHostingEnvironment env) { _configuration = new ConfigurationBuilder() } public void ConfigureServices(IServiceCollection services) { //Here I setup to read appsettings services.Configure(_configuration.GetSection(“AppSettings”)); } } 模型: public class AppSettings { public string Version{ get; set; } } 控制器: public class […]

MVC 6 Controller中的ControllerContext和ViewEngines属性在哪里?

我创建了一个新的MVC6项目并构建了一个新站点。 目标是获取视图的渲染结果。 我找到了以下代码,但我无法让它工作,因为我找不到ControllerContext和ViewEngines 。 这是我想要重写的代码: protected string RenderPartialViewToString(string viewName, object model) { if (string.IsNullOrEmpty(viewName)) viewName = ControllerContext.RouteData.GetRequiredString(“action”); ViewData.Model = model; using (StringWriter sw = new StringWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); viewResult.View.Render(viewContext, sw); return sw.GetStringBuilder().ToString(); } }

如何对返回匿名对象的ASP.NET Core MVC控制器进行unit testing?

我在unit testing返回匿名对象的ASP.NET Core MVC控制器时遇到了麻烦。 unit testing在单独的项目中设置,并直接从主项目调用控制器方法。 控制器方法返回IActionResult但通常这些是OkObjectResult和BadRequestObjectResult对象,它们被转换为具有适当HTTP状态代码的JSON响应。 匿名对象作为ObjectResult对象的构造函数参数传递,我正在尝试对其进行断言(可通过ObjectResult.Value访问)。 我发现这个问题(我如何访问asp.net 5中的内部 )有一个答案,说使用动态和添加 [assembly: InternalsVisibleTo(“Namespace”)] 到AssemblyInfo.cs,允许测试项目访问匿名对象的内部对象属性。 但是,最新版本的ASP.NET Core MVC没有AssemblyInfo.cs,并且在链接问题的答案中建议添加一个也不起作用。 是否现在有一个不同的位置来添加InternalsVisibleTo或我错过了什么?

asp.net 5中的Windows身份validation

我正在ASP .NET 5,MVC 6中构建一个Intranet应用程序。我想知道如何启用Windows身份validation。 默认项目模板仅支持单个用户帐户。