Tag: asp.net core mvc

如何在ASP.NET Core 1.0的DI中的Startup类中添加IHttpContextAccessor?

在ASP.NET Core RC 1中,我使用以下代码来检索上下文的值(页面的完整地址)。 然后我在配置中记录了这个值。 public class Startup { public IConfigurationRoot Configuration { get; set; } private IHostingEnvironment CurrentEnvironment { get; set; } private IHttpContextAccessor HttpContextAccessor { get; set; } public Startup(IHostingEnvironment env, IHttpContextAccessor httpContextAccessor) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile(“appsettings.json”, optional: true, reloadOnChange: true) .AddJsonFile($”appsettings.{env.EnvironmentName}.json”, optional: true); if (env.IsDevelopment()) { builder.AddUserSecrets(); } […]

如何在Asp.Net 5中使用Entity Framework 6.x(MVC 6)

我正在使用VS 2015 CTP-6测试新的Asp.Net 5。 由于Entity Framework 7中缺少function,我现在更喜欢使用EF6。 我尝试删除EF7,然后在PM中应用EF6,如下所示: Uninstall-Package EntityFramework Install-Package EntityFramework -version 6.1.3 没有返回错误,并且project.json文件似乎相应地更新。 虽然,没有DbContext可用。 这是可能吗? 如果是的话,我该如何从这里开始? 我是否需要web.config以兼容EF6?

ASP.NET Core HTTPRequestMessage返回奇怪的JSON消息

我目前正在使用ASP.NET Core RC2,我遇到了一些奇怪的结果。 所以我有一个MVC控制器,具有以下function: public HttpResponseMessage Tunnel() { var message = new HttpResponseMessage(HttpStatusCode.OK); message.Content = new StringContent(“blablabla”, Encoding.UTF8); message.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(“text/plain”); message.Headers.CacheControl = new System.Net.Http.Headers.CacheControlHeaderValue { NoCache = true }; return message; } 如果我用邮递员调用此方法并将Accept标头设置为text plain,我会收到以下回复: { “Version”: { “Major”: 1, “Minor”: 1, “Build”: -1, “Revision”: -1, “MajorRevision”: -1, “MinorRevision”: -1 }, “Content”: { “Headers”: […]

根据操作名称授权用户

我有很多控制器有很多动作。 每个操作都有自己的角色(角色名称= ControllerName.actionName)。 在以前的版本中,我可以测试当前用户是否可以使用“通用”AuthorizeAttribute访问操作: public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) { string currentAction = actionContext.ActionDescriptor.ActionName; string currentController = actionContext.ActionDescriptor.ControllerDescriptor.ControllerName; Roles = (currentController + “.” + currentAction).ToLower(); base.OnAuthorization(actionContext); } 使用asp.net 5版本,我发现我需要使用需求( 如何在ASP.NET Core中创建自定义AuthorizeAttribute? )。 问题是AuthorizationContext没有向我们提供有关用户尝试访问的操作的信息。 我不想在每个操作上放置一个Authorize属性,有没有办法用新框架实现我的要求? (我更喜欢避免使用HttpContext.Current,它不适合管道架构)

使用Asp.net核心创建另一个Web api的代理

我正在开发一个ASP.Net Core Web应用程序,我需要为另一个(外部)Web服务创建一种“身份validation代理”。 我的身份validation代理的意思是我将通过我的Web应用程序的特定路径接收请求,并且必须检查这些请求的标头以获取我之前发布的身份validation令牌,然后将所有请求重定向到相同的请求字符串/内容到我的应用程序将通过HTTP Basic身份validation进行身份validation的外部Web API。 这是伪代码的整个过程 客户端通过对我之前发送给他的唯一URL进行POST来请求令牌 我的应用程序向他发送了一个唯一的令牌以响应此POST 客户端向我的应用程序的特定URL发出GET请求,例如/extapi并在HTTP标头中添加auth-token 我的应用程序获取请求,检查auth-token是否存在且有效 我的应用程序对外部Web API执行相同的请求,并使用BASIC身份validation对请求进行身份validation 我的应用程序从请求中接收结果并将其发送回客户端 这就是我现在所拥有的。 它似乎工作正常,但我想知道它是否真的应该这样做,或者是否有更优雅或更好的解决方案? 从长远来看,该解决方案是否会产生问题以扩展应用程序? [HttpGet] public async Task GetStatement() { //TODO check for token presence and reject if issue var queryString = Request.QueryString; var response = await _httpClient.GetAsync(queryString.Value); var content = await response.Content.ReadAsStringAsync(); Response.StatusCode = (int)response.StatusCode; Response.ContentType = response.Content.Headers.ContentType.ToString(); Response.ContentLength = response.Content.Headers.ContentLength; […]

如何使用AddMvcCore()实现“纯”ASP.NET Core Web API

我见过很多使用默认AddMvc()服务的ASP.NET Core Web API项目,但没有意识到由于对服务的控制,使用AddMvcCore()是一个更好的选择。 您是如何使用AddMvcCore()实现ASP.NET Core Web API的?它为什么更好?

在ASP.NET 5(vNext)MVC 6中添加自定义IRouter

我正在尝试将此示例RouteBase实现转换为与MVC 6一起使用。我已经通过遵循路由项目中的示例来解决大部分问题,但是我正在了解如何从方法返回异步Task 。 我真的不在乎它是否实际上是异步的(对能够提供该答案的任何人欢呼),现在我只想让它运转起来。 我有传出路线function(意味着当我输入路线值时, ActionLink工作正常)。 问题出在RouteAsync方法上。 public Task RouteAsync(RouteContext context) { var requestPath = context.HttpContext.Request.Path.Value; if (!string.IsNullOrEmpty(requestPath) && requestPath[0] == ‘/’) { // Trim the leading slash requestPath = requestPath.Substring(1); } // Get the page that matches. var page = GetPageList() .Where(x => x.VirtualPath.Equals(requestPath)) .FirstOrDefault(); // If we got back a null value set, […]

在ASP.NET 5中获取访问令牌

我的ASP.NET 5(MVC 6 + beta7)Web应用程序(MVC + WebAPI)需要从WebAPI登录调用中获取access_token。 到目前为止,从谷歌搜索,我已经为startup.cs创建了以下代码: app.UseOAuthBearerAuthentication(options => { options.AutomaticAuthentication = true; options.Audience = “http://localhost:62100/”; options.Authority = “http://localhost:62100/”; }); 我的客户方是: var login = function () { var url = “http://localhost:62100/”; var data = $(“#userData”).serialize(); data = data + “&grant_type=password”; $.post(url, data) .success(saveAccessToken) .always(showResponse); return false; }; 是否需要使用UseOpenIdConnectServer ? 如果是这样,我如何使用SigningCredentials以便获得令牌(例如MVC5 ApplicationOAuthProvider)? 请注意,我的网站是简单的演示HTTP站点,我不需要任何SSL。

在ASP.NET Core中限制到控制器命名空间的路由

我试图将我的ASP.NET核心路由的控制器限制到某个命名空间。 在以前版本的ASP.NET MVC中,有一个重载在添加路由时提供了string[] namespaces参数。 ASP.NET MVC 6中缺少这个。所以在谷歌搜索之后,我尝试了类似的东西 app.UseMvc(routes => { var dataTokens = new RouteValueDictionary { { “Namespaces”, new[] {“ProjectA.SomeNamespace.Controllers”} } }; routes.MapRoute( name: “default”, template: “{controller=Home}/{action=Index}/{id?}”, defaults: null, constraints: null, dataTokens: dataTokens ); }); 但它似乎没有做我想要的。 有没有办法将路由引擎限制在某个命名空间? 更新 我刚刚意识到它可能必须对我在每个控制器上使用属性路由这一事实做些什么? 属性路由是否会影响app.UseMvc()定义的路由? 更新2 更多细节: 我有两个完全独立的Web API项目。 顺便提一下,一些路由在两者中都是相同的(即~/api/ping )。 这些项目在Production中是独立的,一个是用户的端点,一个是管理员的端点。 我还使用Microsoft.AspNet.TestHost进行unit testing。 其中一些unit testing需要这两个Web API项目的function(即需要“admin”端点来完全为“用户”设置测试用例)。 但是,当我引用两个API项目时,TestHost因为相同的路由而感到困惑,并抱怨“多个匹配的路由”: Microsoft.AspNet.Diagnostics.DeveloperExceptionPageMiddleware: Error: […]

Cookie身份validation在ASP.NET Core中过早到期

我有一个ASP.NET Core 1.1.2项目,我在其中使用cookie身份validation。 我遇到的问题是,用户在闲置一小时或更短时间后被提示重新登录,并且失去工作。 下面的代码就是我在Startup.cs的Configure函数中使用的设置,我可以告诉它,它应该在至少8小时后到期。 顺便说一句,ProjectProcessFlow只是项目的名称。 app.UseCookieAuthentication(new CookieAuthenticationOptions() { AuthenticationScheme = “ProjectProcessFlow”, LoginPath = new PathString(“/Account/Login/”), ExpireTimeSpan = new TimeSpan(8, 0, 0), SlidingExpiration = true, AutomaticAuthenticate = true, AutomaticChallenge = true }); 我在NuGet中包含了Microsoft.AspNetCore.Authentication.Cookies v1.1.2。 我需要做什么才能在预期的时间内完成登录过期? 附加信息: 我发现当超时发生并且要求用户再次登录时,服务器上的事件查看器中记录了一条警告,指出它找不到项目下的logs文件夹。 所以我创建了该文件夹,并等待超时再次发生。 发生这种情况时,在该文件夹中创建了一个包含以下内容的日志文件: Hosting environment: Production Content root path: C:\inetpub\wwwroot\Sprout Now listening on: http://localhost:13423 Application started. Press Ctrl+C to […]