虽然我明白的概念Task,ActionResult等我仍然觉得这将是最直观的,如果没有指定任何其他在控制器输入不确定。
考虑到与返回的类型一样明确,我应该这样做:
[HttpGet] public ActionResult<Thing> Get()
{
return Ok(Context.Things);
}
Run Code Online (Sandbox Code Playgroud)
但是,对于通用类型的 API 范例,我应该使用它:
[HttpGet] public IActionResult Get()
{
return Ok(Context.Things);
}
Run Code Online (Sandbox Code Playgroud)
最后,尊重 API 哲学的异步性质,我应该应用以下内容:
[HttpGet] public Task<IActionResult> Get()
{
return Ok(Context.Things);
}
Run Code Online (Sandbox Code Playgroud)
我无法决定在一般的绿地场景中哪个最合适。前两个似乎有效。直觉上,我更愿意使用第三个,但由于它不起作用(转换无效),我担心可能我在咆哮错误的二叉树。
完全不知道如何用谷歌搜索它,我正在获取各种示例。不确定如何判断哪些是相关的,我更愿意问。
我正在尝试将Swagger添加到我的项目中。收到的错误如下。
无法使用服务容器中的服务和默认值实例化“ Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator”类型的构造函数。
由于我尚未对Swagger二进制文件本身进行任何更改,因此仅安装了软件包Swashbuckle.AspNetCore和Swashbuckle.AspNetCore.Swagger(均为4.0.1版),我假设这与配置有关。按照这里的建议,我已经设置了如下所示的配置。
services.AddSwaggerGen(_ =>
{
_.SwaggerDoc("v1", new Info { Version = "v1", Title = "My API" });
});
app.UseSwagger();
app.UseSwaggerUI(_ => { _.SwaggerEndpoint("/swagger/v1/swagger.json", "API docs"); });
Run Code Online (Sandbox Code Playgroud)
我不确定是否丢失了一个软件包,是否其中一个是错误的版本,或者我提供的设置配置是否足够。
根据多个来源(例如this one),我应该能够通过以下方式指定名称来在不同环境之间切换。
ng serve --environment=dev
Run Code Online (Sandbox Code Playgroud)
如果我理解正确的设置,我.angular-cli.json文件指向环境/ environment.ts的标志值开发,并于环境/ environment.prod.ts为督促值。
"environmentSource": "environments/environment.ts",
"environments": {
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts"
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我执行第一个示例中引用的那个时,我仍然可以看到 prod 版本。(我在访问组件的构造函数中打印出整个环境对象。)我什至尝试添加目标标志,尽管我很确定这只是运行构建时的优化级别。没有不同...
ng serve --environment=dev --target=development
Run Code Online (Sandbox Code Playgroud)
我缺少什么,如何使serve命令与环境/环境.ts 一起运行?
编辑
main.ts的内容如下。
import { enableProdMode } from "@angular/core";
import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
import { AppModule } from "./app/app.module";
import { environment } from "./environments/environment";
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err …Run Code Online (Sandbox Code Playgroud) 我看到这个答案建议导入图像的语法如下所示(注释掉).在我的情况下,它没有成功(抱怨在该文件中找不到任何模块),我不得不切换到当前活动的语法.
// import Author from "../assets/author.png";
var Author = require("../assets/author.png");
Run Code Online (Sandbox Code Playgroud)
我可以想象的差异是我正在使用TypeScript(通过awesome- typescript -loader转换我的TSX 并加载我的PNG 文件加载器),他们似乎使用JSX.但就我的理解而言,这一切都转化为普通的JS并最终要求.
作为React的菜鸟,我不确定这种差异的原因是什么,但我也不确定要谷歌如何调查自己.
我有许多像这样声明的控件.
<div class="row">
<div class="col-sm-12">
<div>Caption</div>
<input type="text" class="form-control">
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
试图重构我的代码,我介绍了一个组件来封装这个特定的行为.
<div class="row">
<app-textbox [caption]="'Caption'"></app-textbox>
</div>
Run Code Online (Sandbox Code Playgroud)
组件的标记只是原始代码的副本.
<div class="col-sm-12">
<!-- <div style="width:100%;"> -->
<!-- <div class=""> -->
<div>{{data?.caption}}</div>
<input type="text" class="form-control">
</div>
Run Code Online (Sandbox Code Playgroud)
出现的问题是类行似乎没有传播到组件.它扩展到整个宽度(因为它设置为12,但它不是持有类行的组件的宽度- 它更小).分析浏览器控制台中的标记,我可以看到唯一的区别是在结构中注入了自定义控件的标记,如下所示:
div class ="row"
- app-textbox
- - div class ="col-sm-12"
- - 输入
而"旧式"产生了这个:
div class ="row"
- div class ="col-sm-12"
- 输入
处理它的一种方法是在主页面中像这样设置组件上的列.
<div class="row">
<app-textbox [caption]="'Caption'" class="col-sm-12"></app-input-text>
</div>
Run Code Online (Sandbox Code Playgroud)
然而,有两个问题困扰我,让我觉得这种方法不太重要.第一个是组件相对于封闭组件仍然获得(非常小)每边15px的额外边距(所有项目都有它,但自定义应用程序文本框得到它两次,可能是由于封装).另一个问题是这种破坏了封装的目的.
我已经尝试传播组件的宽度并将不同的样式/类设置到输入框等.几个小时后,我意识到我不知所措.
是否有可能使注入的标签app-textbox在其父级中完全传播?
我已经实现了以下组件.它的工作和行为符合预期.然而,由于实施ControlValueAccessor对我来说是新的,我不得不关注博客而不了解几个部分的更深层细节.所以这是一种" 它有效,但为什么?! "的情况.
@Component({ selector: ..., templateUrl: ..., styleUrls: ...,
providers: [{ provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => InputTextComponent),
multi: true }]
})
export class InputComponent implements ControlValueAccessor {
constructor() { }
@Input() info: string;
onChange: any = () => { }
onTouch: any = () => { }
writeValue(input: any): void {
this.info.value = input;
// this.onChange(input);
// this.onTouch();
}
registerOnChange(_: any): void { this.onChange = _; }
registerOnTouched(_: any): void { this.onTouch = _; } …Run Code Online (Sandbox Code Playgroud) 在launchSettings.json中,我有以下内容.它工作正常,我可以使用https:// localhost:44300访问Swagger和页面的其余部分.
{ ...
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:52088",
"sslPort": 44300
}
}, ...
}
Run Code Online (Sandbox Code Playgroud)
当我将"sslPort":44300更改为例如"sslPort":44299时,我仍然可以通过相应地更改URL来访问这些内容.
但是,当我将值设置为5100时,我注意到内容不再可访问.事实上,似乎工作范围相当有限,只集中在44300左右.
那是什么意思?!
为了以防万一,我关掉了防火墙.在配置中我尝试添加这样的网址.行为没有变化.
WebHost.CreateDefaultBuilder(args)
//.UseUrls("https://localhost/5100")
.UseStartup<Startup>();
Run Code Online (Sandbox Code Playgroud)
如何强制应用程序在我选择的端口上正常运行?
在.NET Core 2.2的文档之后,我添加了重定向的配置,如下所示.如此担心,它对这个问题没有影响.
services.AddHttpsRedirection(_ =>
{
_.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
_.HttpsPort = 5100;
});
Run Code Online (Sandbox Code Playgroud)
注意到文档本身建议将5001作为替代端口号,我开始怀疑问题可能完全位于其他地方.我在不同的机器上重新创建了设置,并能够重现错误.不过,两者都是由我配置的计算机,所以如果有人不能确认这种行为,那就太好了.
我有一个提示要使用的Nmap检查端口的答案,显然有什么东西接听端口5100同样可以使用证实TELNET.然而,Swagger以及使用PostMan的电话仍然失败......
我的剃刀页面看起来像这样.
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
<h1>@Localizer["Index"]</h1>
...
Run Code Online (Sandbox Code Playgroud)
我的Startup.cs包含以下内容.
public void ConfigureServices(IServiceCollection services)
{
...
services.AddLocalization(a => a.ResourcesPath = "/");
services.Configure<RequestLocalizationOptions>(a =>
{
CultureInfo[] supportedCultures = {
new CultureInfo("sv-SE"),
new CultureInfo("se")
};
a.DefaultRequestCulture = new RequestCulture("se");
a.SupportedCultures = supportedCultures;
a.SupportedUICultures = supportedCultures;
});
...
}
Run Code Online (Sandbox Code Playgroud)
我将一个名为Controllers.HomeController.se.resx的文件直接放在项目的根目录中.控制器HomeController包含注入.
public class HomeController : Controller
{
private readonly Context _context;
private readonly IStringLocalizer<HomeController> _localizer;
public HomeController(Context context, IStringLocalizer<HomeController> localizer)
{
_context = context;
_localizer = localizer;
}
... …Run Code Online (Sandbox Code Playgroud) 免责声明。我并不是在寻找这两个人的讨论或意见。我的目的也不是评估或描述它们。我在一个项目中,我应该建立一条从传统重构到领域驱动重构的路径,并且我希望保持尽可能小的更改仍然可以完成任务。
根据 MS 的干净架构文档,洋葱形图应该与n 层架构不同,后者是层形的。
阅读时这一切都是有道理的,但随后,我们呈现了干净架构的不同视图,它看起来与 n 层架构非常相似。当然,我确实理解它们之间的不同,但试图理解它们不同之处以及不同之处的核心点并不会因为这种相似性而变得更容易。
这个博客是我不确定的原因的一个更好的例子。它与 .NET 无关,但架构在技术上应该是不可知的。据我了解,该过程的实际路径是基于层的,并且完全等同于n层版本(仅在绘制方式上有所不同,这应该是无关紧要的)。

这两种架构类型之间的主要区别仅仅是我们如何使用它们,还是在代码方面或项目结构中存在实际差异(当然,命名除外)?
.net architecture domain-driven-design n-tier-architecture clean-architecture
我一直在寻找改善我的编码体验并阅读有关像这样的连字的博客。虽然作为一个概念很有趣,但我发现的所有资源都是关于FiraCode 的。我的印象是它是事实上的标准,并且几乎是唯一可用于编码上下文中连字的字体。
问题是我觉得它对眼睛有点不舒服。与我心爱的 Consolas 相比,它收紧了。也许,它的等宽样式如此吸引人,它不需要与连字相冲突。我希望看到对 Consolas(或类似的)的扩展,它只在箭头、比较器等上用所有字符替换连字。
有没有这样的事情,还是我用谷歌搜索对了,没有找到杰克?
c# ×4
angular ×3
typescript ×3
.net ×2
asp.net-core ×2
architecture ×1
bootstrap-4 ×1
css ×1
fonts ×1
html ×1
https ×1
ide ×1
iis-express ×1
ligature ×1
localization ×1
reactjs ×1
swagger ×1
swagger-3.0 ×1
webpack ×1
webpack-4 ×1