Tag: asp.net core

ASP.NET 5 MVC 6通用存储库模式

一直在寻找教程或其他什么的地方。 我一直在尝试将MVC5的旧通用存储库模式实现到一个新的MVC6项目中。 我设置了3个类库.Core , .Data和.Service ,但是IDBset存在问题,似乎我的intellisense不喜欢它,我试图添加System.Data和Entity框架6但没有任何运气(无法找到它) …混乱)。 漫游google之后我决定在这里问一下,有没有正确方法的教程,还是有人会抛出一个非常简单的MVC6 Generic Repository模式? 我有一种感觉,Old的做法可能已经改变,似乎无法找到除内置DI之外的任何信息。 代码:我的IDbContext接口 IDbSet Set() where TEntity : BaseEntity; 没有看到IDbSet ,这仅仅是因为Entity Framework? 我确实有它的参考。 问题可能是我无法找到entity framework的使用陈述。 更新: 使用Entity framework 8.0.0 beta。 将所有IDbset引用更改为DbSet。 但是在我的通用存储库中,我使用的方法如下: public virtual T GetById(object id) { return this.Entities.Find(id); } “查找”不是一种方法。 我不能再在我的捕获中使用“DbEntityValidationException”。

在ASP.NET 5中动态加载程序集

我曾经有一些代码扫描了我的应用程序的bin目录中的程序集,这些程序集尚未加载到AppDomain中并加载它们。 它基本上看起来像: foreach (var assemblyPath in Directory.GetFiles(“path\to\bin”, “*.dll”)) { var inspected = Assembly.ReflectionOnlyLoadFrom(assemblyPath); Assembly.Load(inspected.GetName()); } 为简洁起见,我跳过了try / catch子句等。 这允许我在运行时删除bin文件夹中的程序集以及某些接口的实现,并让IoC容器自动拾取它们。 现在使用新的Roslyn魔法,在调试时不再有物理DLL了。 有没有办法动态检索程序集名称,项目名称或依赖项名称(在project.json )。 我想我必须在Entropy repo中实现类似这个例子的东西,但我不知道如何为我的场景实现它。

如何为实际使用我的数据库上下文的ASP.NET核心控制器编写unit testing?

似乎没有关于如何为实际的 ASP.NET核心控制器操作编写好的unit testing的信息。 有关如何使这项工作真实的任何指导?

如何在C#中连接到.NET Core中的Unix域套接字

我在Linux上的.NET Core中创建了一个unix套接字(Ubuntu 16.04): var unixSocket = “/var/run/mysqld/mysqld.sock”; var socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.IP); 现在我如何连接套接字? .NET Core API列出了各种Socket.Connect选项,但除了第一个处理IP地址之外的所有选项: public void Connect(EndPoint remoteEP) public void Connect(IPAddress address, int port) public void Connect(IPAddress[] addresses, int port) public void Connect(string host, int port) System.Net API定义了一个DNSEndpoint和一个IPEndpoint ,但我似乎无法找到一个UnixEndpoint或类似的类传递给Socket.Connect(EndPoint remoteEP)

如何将自定义角色添加到ASP.NET Core

我找到了这个答案,但它似乎不适合我的ASP Net Core项目。 我想要了解的事情: 如何添加自定义角色。 我甚至直接查看我的MySQL数据库(表aspnetroles ),但我不知道如何使用Id和ConcurrencyStamp 。 我在哪里放置代码以使用这些新角色为数据库设定种子:在Startup ? 在AccountController下Register ? 如何将这个新角色绑定到用户? 我甚至查看了表格,我不知道如何分配数据(没有user2role或aspnetusers.role_id )。

ASP .NET CORE无法使用自定义程序集查找文件或程序集

我遇到了一个奇怪的问题。 我基本上拥有自己的.NET-core网络堆栈,我已经将其构建到一些.dll中,我想从另一个ASP CORE解决方案中引用它们。 VS似乎找到了程序集,我可以在其中导航类型等。我也可以构建项目没有任何问题,但当IIS然后运行服务器时,我得到一个内部服务器错误说明: FileNotFoundException:无法加载文件或程序集’ myDLL ,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null’。 该系统找不到指定的文件。 引用的DLL位于debug-folder中,真正奇怪的是,如果我在与Web堆栈相同的解决方案中创建一个新的ASP Core项目,我可以毫无问题地引用和使用它。 为什么只有在web-stack解决方案之外的项目上运行时才会发生这种情况,我该怎样做才能让它在任何地方都可以运行?

我可以使用内容协商将视图返回到ASP.NET核心中的浏览器和JSON到API调用吗?

我有一个非常基本的控制器方法,它返回一个客户列表。 我希望它在用户浏览时返回列表视图,并将JSON返回给Accept标头中具有application/json请求。 这可能在ASP.NET Core MVC 1.0中吗? 我试过这个: [HttpGet(“”)] public async Task List(int page = 1, int count = 20) { var customers = await _customerService.GetCustomers(page, count); return Ok(customers.Select(c => new { c.Id, c.Name })); } 但是,默认情况下返回JSON,即使它不在Accept列表中。 如果我在浏览器中点击“/ customers”,我会得到JSON输出,而不是我的视图。 我想我可能需要编写一个处理text/html的OutputFormatter,但我无法弄清楚如何从OutputFormatter调用View()方法,因为那些方法在Controller ,我需要知道我要渲染的视图的名称。 有没有我可以调用的方法或属性来检查MVC是否能够找到要呈现的OutputFormatter ? 类似于以下内容: [HttpGet(“”)] public async Task List(int page = 1, int count = 20) […]

如何在环境变量中正确存储连接字符串,以便通过生产ASP.Net Core MVC应用程序进行检索

我正在使用ASP.NET Core MVC应用程序,我的连接字符串存在问题。 我在生产服务器ASPNETCORE_ENVIRONMENT变量设置为Production ,而我的生产服务器是运行IIS的Windows Server 2012R2。 我还在生产服务器上安装了DotNetCore.1.0.4_1.1.1-WindowsHosting.exe。 在开发过程中,我使用UserSecrets来保存我的连接字符串。 这工作正常。 对于生产,我想在生产服务器上的环境变量中使用连接字符串,这就是我遇到问题的地方。 我怀疑它可能与构建环境变量的方式不同。 当我尝试在生产中访问数据库时,我得到一个错误,表明它无法解析连接字符串。 An exception occurred in the database while iterating the results of a query. System.ArgumentException: Keyword not supported: ‘”server’. at System.Data.Common.DbConnectionOptions.ParseInternal(Dictionary`2 parsetable, String connectionString, Boolean buildChain, Dictionary`2 synonyms) at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Dictionary`2 synonyms) at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) 如果我将连接字符串放在appSettings.json ,生产服务器就可以正常工作。 所以,这是我的appSettings.json文件的一个示例,显示了在生产中工作的连接字符串; { “ConnectionStrings”: { “TestDb”: […]

ASP.NET 5 MVC 6中的TagBuilder InnerHtml

在我看来,从beta7开始,TagBuilder发生了重大变化,在公告回购中没有提及它们。 具体来说.ToString不再呈现tagbuilder,它只返回类型的名称。 以前我们可以在HtmlHelper扩展中做这样的事情来构建嵌套的html元素: var li = new TagBuilder(“li”); li.AddCssClass(“inactive”); var span = new TagBuilder(“span”); span.SetInnerText(somestring); li.InnerHtml = span.ToString(); .InnerHtml现在不再接受字符串,因为它现在是IHtmlContent 但由于.ToString()不呈现标记,因此它不起作用: li.InnerHtml = new HtmlString(span.ToString()) 它只是呈现为“Microsoft.AspNet.Mvc.Rendering.TagBuilder”,类型的名称。 我没有在TagBuilder上看到任何新方法来提供所需的function。 我错过了什么? 如何使用TagBuilder构建复杂的嵌套html?

ASP.NET核心,更改默认重定向未授权

我试图重定向到ASP.NET MVC6中的另一个登录URL 我的帐户控制器登录方法有一个Route属性来更改URL。 [HttpGet] [AllowAnonymous] [Route(“login”)] public IActionResult Login(string returnUrl = null) { this.ViewData[“ReturnUrl”] = returnUrl; return this.View(); } 当试图访问一个unathorized页面时,我被重定向到无效的URL,它应该只是/login但是我得到http://localhost/Account/Login?ReturnUrl=%2Fhome%2Findex 我已经配置了cookie身份validation路径,如下所示: services.Configure(opt => { opt.LoginPath = new PathString(“/login”); }); 我添加了一个默认filter,以确保默认情况下所有URL都需要身份validation。 services.AddMvc( options => { options.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build())); }); 我已经检查过url /login确实加载了登录页面,而/account/login没有按预期加载。 编辑:我按原样离开了路径,(除了更改默认控制器和操作) app.UseMvc(routes => { routes.MapRoute( name: “default”, template: “{controller=Site}/{action=Site}/{id?}”); });