如何从我的wwwroot中获取asp.net核心来提供index.html文件?
我想这样做的原因是因为我使用角度CLI开发了一个角度4应用程序,它负责整个构建过程.我已将其设置为我的asp.net核心项目的wwwroot目录,但asp.net核心不想提供它.
起初我试图通过控制器返回html文件.我尝试过这条路线:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}");
});
Run Code Online (Sandbox Code Playgroud)
然后在控制器中我返回如下的html文件:
public IActionResult Index()
{
var webRoot = _env.WebRootPath;
var path = System.IO.Path.Combine(webRoot, "index.html");
return File(path, "text/html");
}
Run Code Online (Sandbox Code Playgroud)
这没用.它返回了404未找到的异常并给出了路径,但它给出的路径是index.html文件的正确路径(我将其剪切并粘贴到资源管理器中并打开文件).
我也在启动时声明这些:
app.UseStaticFiles();
app.UseDefaultFiles();
Run Code Online (Sandbox Code Playgroud)
然后我尝试删除默认路由.现在我能够访问index.html文件,但仅当我输入文件名时,即:
本地主机:58420/index.html的
如果我尝试在没有指定"index.html"的情况下访问域的根目录,则会收到404错误.
将index.html作为默认页面引用的正确方法是什么?我猜测从控制器做它可能更好,因为它将与角度路由兼容而无需重写.
我有一个主要组件,其中有一个路由器插座.在路由器插座中加载的组件中,我抓住url参数,如下所示:
ngOnInit(): void {
// _route is injected ActivatedRoute
this._route.params.subscribe((params: Params) => {
if(params['url']){
this.testUrl = params['url'].replace(new RegExp('\%2[fF]', 'g'), '/');
}
});
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但是当我在我的顶级组件上尝试它时,params对象总是空的.我不明白为什么嵌套组件param对象中有数据,我试图以完全相同的方式访问它.没有错误继续,param对象只是空的.
为什么我的父组件不能从ActivatedRoute获取正确的Params对象?
编辑:
按要求的完整父组件
import { OnInit, Component, Directive } from '@angular/core';
import { Router, ActivatedRoute, Params } from '@angular/router';
import { Observable } from 'rxjs/Observable';
@Component({
selector: 'app-root',
templateUrl: 'app.component.html',
})
export class AppComponent {
public testUrl: string;
constructor(private router: Router, private _route: ActivatedRoute) {
}
ngOnInit(): void{
this._route.queryParams.subscribe((params: Params) => {
console.log(params);
if (params['url']) { …Run Code Online (Sandbox Code Playgroud) 我正在尝试对抽象类中的方法运行单元测试.我浓缩了下面的代码:
抽象类:
public abstract class TestAb
{
public void Print()
{
Console.WriteLine("method has been called");
}
}
Run Code Online (Sandbox Code Playgroud)
测试:
[Test]
void Test()
{
var mock = new Mock<TestAb>();
mock.CallBase = true;
var ta = mock.Object;
ta.Print();
mock.Verify(m => m.Print());
}
Run Code Online (Sandbox Code Playgroud)
信息:
Method is not public
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?我的目标是使用Moq框架测试抽象类中的方法.
我System.Linq.Dynamic.Core用来动态地将lambda表达式添加到EF中的查询中.
我也希望能够按名称选择表格.我找到了这个答案:
但它不适用于asp.net core 2.0.我不能使用DbSet我必须使用DbSet<TEntity>它在错误消息中说.
我希望能够做到 db.GetTable("Namespace.MyTable").Where(...)
我怎样才能做到这一点?
我有一个控制台应用程序,我在项目中添加了一个类库解决方案来保存我的所有单元测试.
除了在运行测试时断点没有被击中这一事实以外,一切正常.
如果我运行整个应用程序,控制台应用程序上的断点就会受到影响.
如果我运行测试,则完全忽略测试类和控制台应用程序中的断点.
我看到另一篇帖子说要去调试>启动新实例,但因为它是一个类库我不能这样做.我应该在不同的项目类型中拥有测试类吗?
我正在使用Nunit,VS2012和NUnit跑步者.
我有几个测试失败,我无法弄清楚为什么,我真的需要能够逐步完成代码.
任何帮助是极大的赞赏.
我来自C#,我正在努力找出使我的代码可扩展的PHP方法.
让我们说比如我有一个函数来计算我建议的每日食物摄入量.它着眼于维生素,卡路里,矿物质......
我希望在我的应用程序中使用许多不同的食物对象以及查看食物不同方面的不同功能,因此我实现了一个IFoodNutrition界面并使我想要与我的函数兼容的食物类实现它.然后我声明我的函数将它作为arg
function GetRda(IFoodNutrition $food){}
Run Code Online (Sandbox Code Playgroud)
在C#中,我将指定我需要在接口中使用的所有属性,因此我知道实现它的任何类都将与此函数兼容.
令我头疼的是PHP只允许接口中的方法签名.
我的问题显然是范式的转变.我不确定PHP中的等效模式是什么.我已经阅读了文档,除非你从一个抽象类继承,但是你只能从一个类继承而不能以相同的方式工作,否则我看不到类似的替代方案.
由于PHP不是类型安全的,我不必创建接口.有人可以将任何对象发送到该方法,如果它具有正确格式所需的属性,它将起作用.这对我来说似乎并不合适,因为我已经习惯于如何在界面中解决事情的相互关系.
我觉得至少应该在验证对象的中间有一些额外的步骤,以及开发人员可以查看的一些明显的结构,然后直观地实现他们自己的类并在运行时看到错误.
这样的PHP中是否有特定的模式?
我在项目文件夹中有符号链接,以便当我在Windows 10机器上的本地开发服务器上运行项目时,可以访问大型视频和图像目录.
这个问题是Git不会让我做"添加".因为当符号链接存在时,它会给我这个错误:
error: readlink("ProjectName/SymlinkName"): Function not implemented
error: unable to index file ProjectName/SymlinkName
fatal: adding files failed
Run Code Online (Sandbox Code Playgroud)
我已将符号链接添加到.gitignore,但这并未改变任何内容.
我在开发项目中制作硬链接时要谨慎.这是我唯一的选择吗?
编辑:
我的gitignore喜欢这样:
NameOfSymlink/
AnotherSymlink/
Run Code Online (Sandbox Code Playgroud) 在这个例子中,我希望在单击黑色外部div时触发警报,而不是在单击内部div中的任何内容时触发警报.
目前,当我单击内部按钮时,它会触发警报.
$("#outer").click(function() {
alert("triggered");
});Run Code Online (Sandbox Code Playgroud)
#outer{
position: absolute;
width: 100%;
height: 100%;
background-color: #000;
display: flex;
justify-content: center;
align-items: center;
}
#inner{
background-color: #fff;
width: 300px;
height: 300px;
text-align: center;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="outer">
<div id="inner">
<button>inner button</button>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
我想在内部div中没有任何东西可以触发警报.我该怎么做呢?
(由于某种原因,内部按钮没有显示在代码段中,这里是codepen链接:https://codepen.io/GuerrillaCoder/pen/Pmvmqx )
在下面的代码我想要up并down浮动到红线的右边,但它们浮过它到div.
为什么是这样?
#outer {
margin-top: 50px;
margin-left: 50px;
width: 300px;
border: 1px solid lightgrey;
}
.inner {
border: 1px solid red;
padding: 15px 80px 15px 40px;
position: relative;
}
.up, .down {
border: 1px solid #000;
float: right;
}
.down {
clear: both;
}Run Code Online (Sandbox Code Playgroud)
<div id="outer">
<span class="inner">
<span class="quantity">Quantity</span>
<span class="up">up</span>
<span class="down">down</span>
</span>
</div>Run Code Online (Sandbox Code Playgroud)
有没有办法在单个操作中序列化从十进制到十进制[]的Json对象属性?
在我的Json产品Feed中,特价商品表示为数组(正常价格/促销价).普通商品只是价格.像这样:
[
{
"product" : "umbrella",
"price" : 10.50,
},
"product" : "chainsaw",
"price" : [
39.99,
20.0
]
}
]
Run Code Online (Sandbox Code Playgroud)
我可以让它工作的唯一方法是,如果我将属性设置为这样的对象:
public class Product
{
public string product { get; set; }
public object price { get; set; }
}
var productList = JsonConvert.DeserializeObject<List<Product>>(jsonArray);
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使其为decimal [],那么它将在单个十进制值上抛出异常.使它成为一个对象意味着数组值是一个JArray所以我以后必须做一些清理工作,我的应用程序中的其他映射要求属性类型是准确的所以我必须将其映射到未映射的属性然后初始化另一个属性没什么大不了的,但命名有点混乱.
对象是这里唯一的选择还是我可以使用序列化程序做一些魔术,要么将单个值添加到数组,要么将第二个值添加到单独的属性以获得特价?
c# ×5
asp.net-core ×2
nunit ×2
unit-testing ×2
.net ×1
angular ×1
css ×1
css-float ×1
git ×1
html ×1
javascript ×1
jquery ×1
json.net ×1
linq ×1
moq ×1
php ×1
testing ×1
typescript ×1