Tag: asp.net core mvc

有没有什么好的理由不在核心MVC中使用ViewComponent而不是Partial View?

我是MVC的新手,并决定从.net-core开始,所以我对核心版本与旧版本的差异没有多少了解。 我确实找到了以下问题提供了一些见解,但没有帮助我决定我是否可以基本上忽略部分观点。 为什么我们应该在部分视图上使用MVC 6function视图组件:有什么区别? 我的问题很简单 – 如果我可以使用ViewComponent做某事,有什么理由不这样做吗? 非常感谢! 下面提供了上下文的示例。 主视图调用: ViewComponent: @await Component.InvokeAsync(“CreatePerson”, new Person()) 部分视图: @{ await Html.RenderPartialAsync(“People/CreatePartialView”, new Person());} Javascript(personCreateForm是局部视图/视图组件中的一个表单): var submitPersonCreate = function(evt) { evt.preventDefault(); if ($(this).valid()) { $.ajax({ type: “POST”, url: ‘@Url.Action(“CreatePartial”, “People”)’, data: $(‘#personCreateForm’).serialize(), success(data) { if (data === true) window.location.reload(); else $(‘#modalPersonInner’).html(data); } }); } return false; } $(‘#personCreateForm’).submit(submitPersonCreate); […]

如何在websocket请求期间validationJWT。 .net核心

我正在开发一个使用JWT身份validation和websockets的小型.net核心应用程序。 我已经成功实现了为标准web api控制器生成和validation令牌。 但是,我还想validationWebSocket请求的令牌,这当然不适用于[Authorize]属性。 我已经设置了我的中间件管道,如下所示: app.UseWebSockets(); app.Use(async (http, next) => { if (http.WebSockets.IsWebSocketRequest == false) { await next(); return; } /// Handle websocket request here. How to check if token is valid? }); // secretKey contains a secret passphrase only your server knows var secretKey = …..; var signKey = new SigningCredentials ( new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secretKey)), […]

对于未经身份validation的重定向到URL而不是401

我正在使用ASP.Net 5 MVC 6和JWT令牌,这些令牌是在用户位于该站点是其子域的另一个站点时创建的。 我的目标是将令牌和请求一起传递给此子域。 如果用户碰巧尝试在没有标题中的正确令牌的情况下来到此子域名url,那么我想将它们重定向到主站点登录页面。 在对最新的RC-1版本感到非常沮丧之后,使用带有SecureKey而不是证书的JWT令牌。 我终于通过使用RC-2夜间构建版本来使用我的代码。 现在我的问题是,我希望能够在未经身份validation的用户的情况下重定向到外部URL。 以下是我的身份validation代码示例: var key = “mysupersecretkey=”; var encodedkey2 = Convert.FromBase64String(key); app.UseJwtBearerAuthentication(options => { options.AutomaticAuthenticate = true; options.AutomaticChallenge = true; options.TokenValidationParameters.IssuerSigningKey = new SymmetricSecurityKey(encodedkey2); options.TokenValidationParameters.ValidIssuer = “https://tv.alsdkfalsdkf.com/xxx/yyy”; options.TokenValidationParameters.ValidateIssuer = true; options.TokenValidationParameters.ValidAudience = “https://www.sdgfllfsdkgh.com/”; options.TokenValidationParameters.ValidateAudience = true; options.Configuration = new Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration() { Issuer = “https://tv.sdfkaysdf.com/xxx/yyy” }; }); 现在我看到其他使用OpedId的例子,他们很容易,有一个名为RedirectUrl的参数 app.UseOpenIdConnectAuthentication(options […]

ASP.NET Core为项目目录之外的文件提供服务

在我的ASP.NET核心项目中,我试图像这样提供一个html文件: public IActionResult Index() { return File(“c:/path/to/index.html”, “text/html”); } 这会导致错误: FileNotFoundException: Could not find file: c:/path/to/index.html 将ErrorMessage的路径粘贴到我的浏览器中,我可以打开文件,因此文件显然就在那里。 我能够提供文件的唯一方法是将它放在项目文件夹中的wwwroot中,并按照以下方式提供: public IActionResult Index() { return File(“index.html”, “text/html”); } 我已经使用app.UseStaticFiles(options)更改了我提供静态文件的文件夹app.UseStaticFiles(options) ,所以我认为Controller会将该文件夹用作默认文件,但它会继续查找wwwroot。 如何从Controller中提供位于wwwroot之外,甚至是项目之外的文件?

Resolver或ServiceProvider使用ICompositeViewEngine所需的依赖项

我试图在ASP.NET Core MVC中使用ICompositeViewEngine替换System.Web.Mvc中的ViewEngine,因为它在.NET Core中不再可用。 我通常尝试在此项目中将webform从ASP.NET迁移到ASP.NET Core。 我找到了以下解决方案: MVC 6 Controller中的ControllerContext和ViewEngines属性在哪里? 我相信这可以解决我的问题。 我还在github问题中找到了与ServiceProvider类似的引擎创建: https : //github.com/aspnet/Mvc/issues/3091 但是,我不确定我可能会缺少哪些依赖项或框架,因为我是.NET的新手。 我有以下命名空间: using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ViewEngines; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.Extensions.DependencyInjection; 我认为这可能与我的问题有关。 我原来的代码是: public static string RenderPartialToString(Controller controller, string viewName, object model) { controller.ViewData.Model = model; using (StringWriter sw = new StringWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName); ViewContext viewContext = […]

ASP.NET 5 MVC6 User.GetUserId()返回错误的id

我在ASP.NET 5中有一个注册用户的简单项目。 我试图通过扩展方法GetUserId()从using System.Security.Claims命名空间获取当前登录用户的id。 不幸的是,这种方法使我不再存在id,我不知道为什么。 这是我的简单代码: var currentUserId = User.GetUserId(); 方法结果: 数据库:

.NET Core中的自定义授权属性

我正在.NET Core 1.1中构建一个API。 我在HttpContext.User中构建了一个自定义User对象,该控制器是我所有其他控制器inheritance的基本控制器,我默认启用了身份validation(必要时必须手动禁用[AllowAnonymous] )。 User对象具有IsAdmin属性。 现在我正在检查用户是否是每个相关function顶部的管理员,如下所示,但我觉得必须有一种方法来添加自定义属性来简化和清理此代码。 作为参考, User.IsAdmin是这方面的简写: bool.Parse(HttpContext.User.FindFirst(“IsAdmin”)?.Value) 而不是这个: [HttpGet] public async Task Get() { if (!User.IsAdmin) return Forbid(); // logic } 我喜欢这个(或类似的东西): [AdminOnly] [HttpGet] public async Task Get() { // logic } 我试着查看[AuthorizeAttribute]的源代码来尝试构建,但它只是一个shell而且我不知道真正的魔法发生在哪里。 我怎么能做到这一点?

删除ASP.Net核心dependency injection中的服务

在Asp.Net MVC Core(早期版本,版本1.0或1.1)中,dependency injection绑定在Startup.cs类中配置如下: public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddScoped(); // … } } 在我的应用程序中,我通常有一个基本的Startup类,其中generics绑定被定义为这些行的序列: public abstract class BaseStartup { public virtual void ConfigureServices(IServiceCollection services) { services.AddScoped(); services.AddScoped(); } } 然后在我的应用程序中,我inheritance了启动类,并注入了其他服务: public class Startup : BaseStartup { public override void ConfigureServices(IServiceCollection services) { base.ConfigureServices(services); services.AddScoped(); services.AddScoped(); } } 我现在想知道:我怎样才能“覆盖”以前的绑定? 例如,我希望删除或修改基类中定义的绑定,如: services.Remove(); […]

ServiceFilter和TypeFilter – 注入这些filter有什么区别?

ServiceFilter我们必须在Startup.cs中注册。 TypeFilter是由Microsoft.Extensions.DependencyInjection.ObjectFactory注入的,我们不需要注册那个filter。 那么当我们应该使用ServiceFilter和TypeFilter时?

ASP.NET Core MVC,从数据库获取文件,并呈现为图像

我将图像数据存储在SQL表中,字段类型为varbinary(max)我还存储图像内容类型。 使用Microsoft ASP.NET Core MVC和Dapper,我试图从数据库中恢复文件并将其渲染为图像。 这是我的FileModel : using System; namespace Brand.Models { public class FileModel { public Guid ID { get; set; } public string FileName { get; set; } public string FileType { get; set; } public byte[] FileData { get; set; } public int FileLength { get; set; } public long Version { […]