我正在尝试使用以下内容获取集线器的上下文:
var hubContext = GlobalHost.ConnectionManager.GetHubContext<SomeHub>();
Run Code Online (Sandbox Code Playgroud)
问题是没有定义GlobalHost.我看到它是SignalR.Core dll的一部分.目前,我在项目.json文件中,在依赖项下有以下内容:
"Microsoft.AspNet.SignalR.Server": "3.0.0-*"
Run Code Online (Sandbox Code Playgroud)
如果我添加最新的Core版本:
"Microsoft.AspNet.SignalR.Server": "3.0.0-*",
"Microsoft.AspNet.SignalR.Core" : "2.1.2"
Run Code Online (Sandbox Code Playgroud)
我得到了一大堆错误,因为服务器和核心是冲突的.如果我将它们更改为使用版本"3.0.0-*",则所有冲突都会消失,但无法找到GlobalHost.如果我删除服务器,只删除用户核心版本2.1.2然后GlobalHost工作,但所有其他需要服务器的东西,显然不会.
有任何想法吗?
从launch.json开始,在特定端口上托管.NET Core的正确方法是什么?例如,当我运行我的.NET Core应用程序VS Code时,将它托管在localhost:5000上,但我想在localhost:5050上托管它.
提前致谢.
我注意到.NET核心不允许,myObj.GetType().GetProperties()因为没有GetProperties方法存在.有没有其他方法通过反射获得类的属性?
在使用Entity Framework的迁移命令时,是否可以配置/引导依赖注入?
Entity Framework Core支持DbContext子类的依赖注入.该机制包括允许在数据访问之外配置数据访问DbContext.
例如,以下内容将使用从中检索的连接字符串将EF配置为持久保存到SQL Server config.json
ServiceCollection services = ...
var configuration = new Configuration().AddJsonFile( "config.json" );
services.AddEntityFramework( configuration )
.AddSqlServer()
.AddDbContext<BillingDbContext>( config => config.UseSqlServer() );
Run Code Online (Sandbox Code Playgroud)
但是,迁移命令不知道执行此代码,因此Add-Migration缺少提供程序或缺少连接字符串会失败.
迁移可制成通过覆盖工作OnConfiguring的内DbContext子类来指定供应商和配置字符串,但在不同的配置是其他地方所期望的方式获得.最终保持我的迁移命令和我的代码都工作变得非常复杂.
注意:我的DbContext生活在与使用它的入口点不同的程序集中,我的解决方案有多个启动项目.
c# dependency-injection dbcontext entity-framework-core .net-core
在MVC 5中我曾经这样做过:
var context = (HttpContextBase)Request.Properties["MS_HttpContext"];
var file = (HttpPostedFileBase)context.Request.Files[0];
Run Code Online (Sandbox Code Playgroud)
现在这些在vCxt下的MVC 6中不可用.如何从请求中获取文件?
我们想在当前主体中添加很多角色声明(我们使用Authorize(Roles)属性),并发现IClaimsTransformer这看起来很合适。
我们已经registerd像这样
app.UseClaimsTransformation(new ClaimsTransformationOptions
{
Transformer = new GetRolesFromDatabaseClaimsTransformer(new RoleManager2(Configuration.GetConnectionString("ourcoolapp")))
});
Run Code Online (Sandbox Code Playgroud)
而变换是这样的:
public Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context)
{
// A hacky way to not load on all requests. Better ideas?
if (!context.Context.Request.Path.Value.Contains("api/"))
{
return Task.FromResult(context.Principal);
}
var roleClaims = RoleManager.GetRolesForUser(context.Principal.Identity.Name).Select(roleName => new Claim("role", roleName));
var claims = new List<Claim> { };
var identity = context.Principal.Identity as ClaimsIdentity;
claims.AddRange(identity.Claims);
claims.AddRange(roleClaims);
var userIdentity = new ClaimsIdentity(claims, "local");
var userPrinicpal = new ClaimsPrincipal(userIdentity);
return Task.FromResult(userPrinicpal);
}
Run Code Online (Sandbox Code Playgroud)
问题:是否有其他或更聪明的方法来添加角色声明?
谢谢
Larsi
claims-based-identity authorize-attribute asp.net-web-api asp.net-identity .net-core
对于ASP.NET Identity 2.0:
有人知道如何"分配给定索赔的所有用户"吗?
假设我有一个type ="ArticleId"和value ="1"的声明.
如何让所有拥有此声明的用户获得此声明?我真的想不出来..所以,谢谢你的帮助!!
我已经EntityFrameworkFileProvider为我的ASP.NET核心Web应用程序实现了,我希望ViewDbContext实例由ASP.NET核心DI框架在构造函数中注入:
(ViewDbContext是dbContext)
public class EntityFrameworkFileProvider : IFileProvider
{
private ViewDbContext _context;
public EntityFrameworkFileProvider(ViewDbContext context)
{
/* should be injected by asp.net core DI */
_context = context;
}
public IDirectoryContents GetDirectoryContents(string subpath)
{
.....
}
public IFileInfo GetFileInfo(string subpath)
{
var result = new DatabaseFileInfo(_context, subpath);
return result.Exists ? result as IFileInfo : new NotFoundFileInfo(subpath);
}
public IChangeToken Watch(string filter)
{
return new DatabaseChangeToken(_context, filter);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我将它们添加EntityFrameworkFileProvider到RazorViewEngineOptionstartup.cs中。如何使用startup.cs方法使 …
源代码:
@{ ViewBag.Title = "???? ????"; }
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>@ViewBag.Title</title>
</head>
<body>
<div class="container" dir="rtl">
@RenderBody()
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它在浏览器中很好地呈现,但是我想要html源中的相同文本(对于某些搜索引擎优化器软件)
并输出:
<!DOCTYPE html>
<html>
<head>
<title>سلام علیک</title>
</head>
<body>
...
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我遇到了一个我无法弄清楚的问题。
我尝试在服务器端始终处理 UTC DateTime。
我有一个 AspNetCore Mvc 应用程序,其端点接受可能包括 DateTimes 的查询。我希望 Mvc 了解这些日期已经在 UTC 中,而不是“再次”转换它们。
我的系统在西班牙,(UTC +2)
如果我像这样向我的本地主机服务器发送一个 http 请求:
http://localhost:50004/api/Resources?appliesOn=2018-06-30T18:00:00.000Z
Run Code Online (Sandbox Code Playgroud)
我想让反序列化的日期时间作为 UTC 表示与以下相同的日期:
DateTime.SpecifyKind(new DateTime(2018, 6, 30, 18, 0, 0), DateTimeKind.Utc)
Run Code Online (Sandbox Code Playgroud)
但是我可以看到 Mvc 总是将日期 2018-06-30T18:00:00.000Z 转换为两个小时后: 2018-06-30 20:00:00
我试图告诉 Mvc 使用 UTC json 序列化器/反序列化器,但没有任何变化:
services
.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
});
Run Code Online (Sandbox Code Playgroud)
有没有办法在 http GET 请求中发送查询参数已经作为 UTC 日期时间的表示?我理解 ISO 8601 中的日期,如果它有后缀 Z 表示“零偏移”,应该已经解释为 UTC 日期时间。为什么 Mvc 会对此进行转换并添加 2 小时的偏移量?
任何澄清将不胜感激!
PS:这是我的端点,你可以看到没有什么特别的:
[HttpGet("")]
public IActionResult GetResources()
{
var displayUri = …Run Code Online (Sandbox Code Playgroud) 我已经实现了如下的无意图.
[LuisIntent("None")]
public async Task None(IDialogContext context, LuisResult result)
{
await context.PostAsync("I'm sorry. I didn't understand you.");
context.Wait(MessageReceived);
}
Run Code Online (Sandbox Code Playgroud)
但看起来我需要在路易斯那边训练一些话语,这是我不想要的.我正在寻找在路易斯找不到或识别的东西,应该解雇无意图处理程序.我该如何实现这一目标?
c# ×6
asp.net-core ×5
.net-core ×3
asp.net ×1
azure-language-understanding ×1
botframework ×1
datetime ×1
dbcontext ×1
iso8601 ×1
signalr ×1
signalr-hub ×1
utc ×1