我有一个使用Angular 2的Ionic 2应用程序,它将Http PUT发送到ASP.NET Core API服务器.这是我用来发送请求的方法:
public update(student: Student): Promise<Student>
{
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('authentication', `${student.token}`);
const url = `${this.studentsUrl}`;
return this.http
.put(url, JSON.stringify(student), { headers: headers })
.toPromise()
.then(() => student)
.catch(this.handleError);
}
Run Code Online (Sandbox Code Playgroud)
我在headers对象上设置了身份验证密钥/值.
但是当我在服务器上收到此请求时,我在标题上找不到身份验证密钥:
正如您在图片中看到的那样,标题上有许多键,但不是我手动添加到客户端应用程序中的标题的内容和身份验证密钥.
我究竟做错了什么?
我的模板中有这个组件:
<vector-editor #scaleControl
[x]="scaleX"
[y]="scaleY"
[z]="scaleZ" >
</vector-editor>
Run Code Online (Sandbox Code Playgroud)
该vector-editor结构如下:
export class VerticeControlComponent implements OnInit
{
@Input() x: number;
@Input() y: number;
@Input() z: number;
...
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我抓住了对#scaleControl使用的引用
@ViewChild('scaleControl') scaleControl: ElementRef;
Run Code Online (Sandbox Code Playgroud)
现在,如果我输出scaleControl到控制台,我得到这个结果:
可以看出,引用不是null,并且我的组件的所有属性都在那里.我想访问这些属性,但在代码中实际的类型scaleControl是,ElementRef而不是VectorEditorControl在输出中看到.因此,我不允许使用TypeScript this.scaleControl.x.
我也试着ElementRef像这样投
var temp = <VectorEditorControl>this.scaleControl
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误,告诉我,我不能投ElementRef来VectorEditorControl
最后,我试图访问,this.scaleControl.nativeElement但它是未定义的...
我在这里错过了什么?
我有一个loadData从文件加载一些文本的函数:
Future<String> loadAsset() async {
return await rootBundle.loadString('assets/data/entities.json');
}
Run Code Online (Sandbox Code Playgroud)
该loadString方法来自Flutter SDK,并且是异步的.
在loadAsset随后的方法被调用的另一种方法,必须我标记为async,因为loadAsset是异步,我需要使用await:
Future<List<Entity>> loadEntities() async {
String jsonData = await loadAsset();
return parseData(jsonData);
}
Run Code Online (Sandbox Code Playgroud)
该parseData方法不是异步的,它接收String,解析它,并返回一个对象列表:
List<Entity> parseData(String jsonString) {
...
}
Run Code Online (Sandbox Code Playgroud)
但由于loadEntities必须标记async,这需要它返回一个Future,但实际上,它不是一个Future因为我使用await,它等待loadAsset方法完成,然后parseData使用结果调用函数.
这很容易变成一个async叫雪球,因为每个使用的方法也loadEntities必须标记为async.
另外,我不能loadEntities在类构造函数中使用,因为构造函数应该标记为async,这在Dart中是不允许的.
我async/await在Dart中使用的模式错了吗?我怎么能loadEntities在类构造函数中使用该方法?
我在这里找了这个问题,但我找不到答案.
我有一个针对.NET Core 2.0的类库项目和一个针对.NET Full Framework 4.7的WPF项目.我无法在WPF项目中引用类库.我收到以下错误:
项目'xxxxxxxx'的目标是'.NETCoreApp,版本= v2.0'.它不能被针对'.NETFramework,Version = v4.7'的项目引用.
有没有办法在Full Framework中引用.NET Core项目?
我有大量的数据包含~150万条目.每个条目都是这样的类的实例:
public class Element
{
public Guid ID { get; set; }
public string name { get; set; }
public property p... p1... p2...
}
Run Code Online (Sandbox Code Playgroud)
我有一个Guids列表(约4百万),我需要根据Element类的实例列表获取名称.
我将Element对象存储在Dictionary中,但填充数据需要大约90秒.在向字典中添加项目时,有什么方法可以提高性能吗?数据没有重复,但我知道字典在添加新项目时会检查重复项.
如果有更好的结构,结构不需要是字典.我尝试将Element对象放在List中,在添加时表现更好(~9秒).但是当我需要使用某个Guid查找该项目时,需要超过10分钟才能找到所有400万个元素.我尝试使用List.Find()并手动迭代列表.
此外,如果不使用System.Guid,我将它们全部转换为String并将它们的字符串表示形式存储在数据结构上,整个填充字典和填充另一个列表上的名称的操作只需要10秒,但随后我的应用程序消耗1.2当我将它们存储为System.Guid时,RAM的Gb而不是600mb.
关于如何更好地执行它的任何想法?
我很难尝试从常规Windows桌面开发迁移到ASP.NET Core MVC.我遇到的一个问题是创建我的解决方案.我想从VS 2015附带的默认项目中删除与UI无关的所有内容,并将其放入一个单独的项目中.
我注意到ASP MVC Core引用.NETCoreApp和类库项目引用.NETStandard.
我的问题是我需要在类库中使用动态keyworkd并且它不支持它.MVC项目支持没有任何问题.我想这是因为不同的.NET版本.
NETStandard和NETCoreApp有什么区别?
我可以创建一个使用与MVC项目相同的引用的类库,这样我就可以在其上使用dynamic关键字吗?
或者我应该在同一个地方坚持使用所有域,基础设施等的一个项目解决方案?
我在这样的页面中有一个按钮:
<button [routerLink]="['../edit', 14]">Test</button>
Run Code Online (Sandbox Code Playgroud)
所以,如果我在http://localhost/dashboard并点击按钮,我会被重定向到http://localhost/dashboard/edit/14,这正是我所期望的.
现在我需要在Typescript中做同样的事情.我Router在我班上注入了这项服务并尝试了以下方法:
this.router.navigate([`../edit/${item.id}`]);
this.router.navigate([`/edit/${item.id}`]);
this.router.navigate([`edit/${item.id}`]);
Run Code Online (Sandbox Code Playgroud)
但没有一个工作,所有这些都将我重定向到我的起始页面,没有任何错误.
是否Router需要一些额外的设置?
Angular路由器在NgRx效果中是否有任何限制?
我刚开始学习NgRx,我有以下代码:
@Effect() public authenticate$ = this.actions$
.ofType(authenticationActions.AUTHENTICATE)
.switchMap((action: AuthenticateAction) => this.authenticationService.authenticate(action.payload)
.map((data: TokenData) => {
const user: User = {
token: data.token,
username: 'dummy',
};
console.log(data);
this.router.navigateByUrl('/');
return new authenticationActions.AuthenticateSuccessAction(user);
})
.catch(error => { console.log(error); return Observable.throw(error); })
);
Run Code Online (Sandbox Code Playgroud)
控制台记录数据变量并AuthenticateSuccessAction触发操作,因此正在执行路由器线,但导航不会发生.
我有一个MediatR管道行为,如下所示:
public class FailFastRequestBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
{
private readonly IEnumerable<IValidator> _validators;
public FailFastRequestBehavior(IEnumerable<IValidator<TRequest>> validators)
{
_validators = validators;
}
public Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate<TResponse> next)
{
var failures = _validators
.Select(async v => await v.ValidateAsync(request))
.SelectMany(result => result.Result.Errors)
.Where(f => f != null);
return failures.Any()
? Errors(failures)
: next();
}
...
}
Run Code Online (Sandbox Code Playgroud)
像这样的MediatR命令:
public class MyUseCase
{
public class Command : IRequest<CommandResponse>
{
...
}
public class Validator : AbstractValidator<Command>
{
...
}
public class Handler<T>: …Run Code Online (Sandbox Code Playgroud) 我有一个List<Matrix4>,其中Matrix4包含16个浮点数的结构,所以它使用16*4字节= 64字节.
当我开始向列表添加项目时,当我跨越100万行时,它会抛出Out Of Memory Exception.
我知道.NET每个对象的限制为2Gb,但除非我完全忘记了:
1.000.000*64字节= ~61mb
哪个甚至没有接近极限.
当我开始填充列表时,根据任务管理器,我的应用程序正在使用896mb,当我到达异常时它使用1028mb.
这台电脑有8GB的物理内存,但它只使用6Gb.
有关原因的任何线索可能会发生吗?
---更新----
将平台目标更改为x64解决了单独测试项目的问题.不幸的是原始项目不能是x64因为引用x86 DLL不能在x64上运行.但这是另一个问题.
我没有考虑将它改为x64,因为它似乎远离内存限制,但我认为Hans Passant在120mb上距离1.3Gb限制太近了.谢谢你们.
angular ×4
c# ×4
.net ×3
.net-core ×2
asp.net-core ×1
async-await ×1
asynchronous ×1
dart ×1
dictionary ×1
flutter ×1
http ×1
list ×1
mediatr ×1
ngrx ×1
ngrx-effects ×1