Tag: asp.net core mvc

如何使用Reflection或其他准确方法获取控制器内的当前ASP.NET核心控制器方法名称

我想获取我的ASP.NET Core控制器的当前方法名称 我试过通过reflection获取方法名称: [HttpGet] public async Task CreateProcess(int catId) { string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name; 但这给了我一个MoveNext的值,而不是CreateProcess 请注意我不想使用ViewContext string methodName = ActionContext.RouteData.Values[“action”].ToString(); 因为我通过启动设置小写我的URL。上面将得到createprocess而不是CreateProcess 我最好想要一个简单的单行而不是多行扩展方法。

ASP.NET MVC 6上每个控制器的特定JSON设置

我需要在ASP.NET MVC 6 webApi中为每个控制器设置特定的JSON设置。 我发现这个样本(我希望!)适用于MVC 5: 在每个控制器的ASP.NET WebAPI上强制使用CamelCase using System; using System.Linq; using System.Web.Http.Controllers; using System.Net.Http.Formatting; using Newtonsoft.Json.Serialization; public class CamelCaseControllerConfigAttribute : Attribute, IControllerConfiguration { public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor) { var formatter = controllerSettings.Formatters.OfType().Single(); controllerSettings.Formatters.Remove(formatter); formatter = new JsonMediaTypeFormatter { SerializerSettings = {ContractResolver = new CamelCasePropertyNamesContractResolver()} }; controllerSettings.Formatters.Add(formatter); } }

在ASP.NET Core Web API中注册新的DelegatingHandler

我想创建一个新的Handler,它扩展了DelegatingHandler,使我能够在进入控制器之前做一些事情。 我已经在各个地方读过我需要从DelegatingHandlerinheritance,然后像这样覆盖SendAsync(): public class ApiKeyHandler : DelegatingHandler { protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { // do custom stuff here return base.SendAsync(request, cancellationToken); } } 这一切都很好,花花公子除了它没有做任何事情,因为我没有在任何地方注册! 我再次在很多地方看到我应该在WebApiConfig.cs中这样做,但这不是Web API的ASP.NET 核心版本的一部分。 我试图找到类似于Startup.cs文件(Configure(),ConfigureServices()等)中的各种东西,但没有运气。 谁能告诉我如何注册我的新处理程序?

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”。

具有Active Directory on Premise的IdentityServer 4

我们的客户端有很多应用程序,他们希望将它集成到只登录一次(单点登录),但是他们希望在内部使用活动目录,他们有自己的服务器。 我们决定评估identityserver,所以我们发现这个https://identityserver4.readthedocs.io/en/release/topics/windows.html,identitserver 4支持活动目录,但在这里我们看不到我们要把LPAD放在哪里//。 ..连接到活动目录的路由…所以我们怀疑如果identityserver支持或不支持Active目录或者我们不能很好地承担它。 谢谢。

如何在环境变量中正确存储连接字符串,以便通过生产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 MVC中的Cookie 5

我正在开发一个应用程序,其中用户通过外部身份提供商(如AAD,Google,WS-Federated Authentication等)进行SignUp或SignIn。现在,我想在用户计算机上创建cookie,以便登录到用户SignOut。 给我一些思考并指导我如何克服它。 提前致谢。

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?}”); });

什么是ASP.NET Core MVC等同于Request.RequestURI?

我发现了一篇博文 ,展示了如何将熟悉的东西(如HttpResponseMessage)“重新填充”回ASP.NET Core MVC,但是我想知道什么是新的本机方式,以便在REST Post方法中执行与以下代码相同的操作。控制器: // POST audit/values [HttpPost] public System.Net.Http.HttpResponseMessage Post([FromBody]string value) { var NewEntity = _repository.InsertFromString(value); var msg = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Created); msg.Headers.Location = new Uri(Request.RequestUri + NewEntity.ID.ToString()); return msg; } 在ASP.NET Core MVC项目中,我似乎无法获得Request.RequestUri。 我尝试检查Request,我能够创建这样的函数: private string UriStr(HttpRequest Request) { return Request.Scheme + “://” + Request.Host + Request.Path; // Request.Path has leading / } […]