我目前正在ASP.NET MVC 4 Web API中尝试OData端点.我喜欢这个概念,并尝试在我们的项目中提出有效的方法.我有一个问题如下:我们有一个服务,它能够返回一个IQueryable并将一个实体的名称作为输入:
public IQueryable GetAll(string entityName);
Run Code Online (Sandbox Code Playgroud)
在标准Web API(与OData控制器相对)中,我可以创建一个通用控制器,可以以/ api/entities/{entityName}的形式调用并返回IQueryable.如果是OData控制器,我执行以下特定于实体的步骤:
我想使用通用服务并避免尽可能多的特定于实体的实现.如果服务可以返回实体列表和相应类型,则可以轻松地自动完成第一步.这留下了第2步,因为到目前为止我需要为每个实体创建一个特定的控制器.我还想避免这种情况,并创建一个使用通用服务的通用控制器.
任何人都可以通过影响OData路由推荐解决方案吗?
在我的应用程序中,我想在两个路由器插座中显示内容,一个是主路由器插座,另一个是命名路由器。如果将两个出口都放在根级别,则可以像这样设置命名出口的内容:
this.router.navigate([{ outlets: { rootSecondary: ['rootSecondaryPath'] } }]);
Run Code Online (Sandbox Code Playgroud)
但是,我希望应用程序的总体布局提供一个路由器出口,并能够在子路由中使用其他路由器出口结构。
如果创建子路由,该子路由也具有主要出口和命名出口,则无法设置次要出口的内容。报告的错误是:
无法匹配任何路线。
所述路线定义如下:
const appRoutes: Routes = [
{ path: '', component: RootPrimaryComponent },
{ path: 'rootSecondaryPath', component: RootSecondaryComponent, outlet: 'rootSecondary' },
{
path: 'child', component: ChildComponent, children:
[
{ path: '', component: ChildPrimaryComponent },
{ path: 'childSecondaryPath', component: ChildSecondaryComponent, outlet: 'childSecondary' },
]
},
];
const appRouting = RouterModule.forRoot(appRoutes);
Run Code Online (Sandbox Code Playgroud)
app.component.html模板包含一个主要出口,以及-为了进行测试-一个命名的次要出口:
<router-outlet></router-outlet>
<div style="border: solid 1px green">
<router-outlet name="rootSecondary"></router-outlet>
</div>
Run Code Online (Sandbox Code Playgroud)
上面的代码是通过按钮调用的,它可以毫无问题地设置rootSecondary出口。
模板child.component.html定义了两个位于根主出口内的出口:
<router-outlet></router-outlet>
<div style="border:solid 1px …
Run Code Online (Sandbox Code Playgroud) 现在,当我将其从 mvc 控制器发送到 Web api(如“01-05-2020 00:00:00”)时,Web api 会将其获取为“05-01-2020 00:00:00”,如果我发送“21-” 04-2020 00:00:00' 它给出错误 400: BadRequest。
我在 Web api 中获取参数为
IHttpActionResult Applications(DateTime fromDate,DateTime toDate)
Run Code Online (Sandbox Code Playgroud)
Mvc控制器
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://localhost:44329/api/Values");
var postTask = client.GetAsync("/api/Values/Applications?fromDate=" + FromDate + "&toDate=" + ToDate );
Run Code Online (Sandbox Code Playgroud) 我最初在 asp.net 文档上发布了一个问题,并在此处引用。
由于删除了公共 Startup.cs,从 NET5 迁移到 NET6 破坏了使用 WebApplicationFactory 的大量测试。另一种选择是转向程序,该程序在新模板出现之前一直有效。在新模板中没有公共类程序,因此我们需要添加一个公共部分类 Program {}
我正在查看文档,他们提供了一个使用 InternalsVisibleTo 的新解决方案,恕我直言,它更好,因为它不会仅出于测试目的而更改代码。
然而,这会导致这样的代码
public class UnitTest1 : IClassFixture<WebApplicationFactory<Program>>
{
public UnitTest1(WebApplicationFactory<Program> applicationFactory)
{
}
}
Run Code Online (Sandbox Code Playgroud)
然而问题是程序是内部的,这会触发 CS0051:
UnitTest1.cs(8, 12):[CS0051] 可访问性不一致:参数类型“WebApplicationFactory”比方法“UnitTest1.UnitTest1(WebApplicationFactory)”更难访问
问题是 xunit 要求它的类/构造函数是公共的。
那么有人设法在没有公众部分的情况下让这项工作正常进行吗?
我即将编写一个Visual Studio加载项(目标环境:VS2010),该加载项应该使用户能够执行一些与工作项相关的任务.如何获取团队资源管理器中当前处于活动状态的TFS项目?我可以订阅一个事件,通知我当前项目集合何时更改?
谢谢,
马库斯
能不能让我知道为什么这段代码不起作用?我把值1
或值2
放在了text element
但是我没有得到结果"这是1"或"这是2".似乎行" x = document.getElementById("value").value;
"无法正常工作,因为在调试过程中我已经完成了n=1;
它并且工作正常
<html>
<body>
<p>Check the value</p>
<input id="value" type="text"></input>
<button type="button" onclick="myFunction()">Check</button>
<p id="demo"></p>
<script>
function myFunction()
{
var x;
x = document.getElementById("value").value;
switch(x)
{
case 1:
document.getElementById("demo").innerHTML = "this is 1";
break;
case 2:
document.getElementById("demo").innerHTML = "this is 2";
break;
}
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我需要传递ID的查询字符串,其中包含冒号(:),即ABC_PD:123456.当我在查询字符串会话中使用此ID并且当它重定向到URL中的另一个页面时,它在网页上给出404没有错误发现错误.
因此,任何人都可以为此提供解决方案,以便我可以在查询字符串中传递冒号,并且当页面将重定向而没有404错误.
解决方案将非常感谢.
我现在已经连续工作了2个小时并阅读了很多这样的问题,但是我无法看到我的OleDbCommand在哪里或者为什么没有按照应有的方式工作.
我把这段代码写成了我见过的所有问题和答案的合并:
using (var connection = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;" + @"data source= *path to mdp*"))
{
try
{
connection.Open();
foreach (KeyValuePair<string, string> pair in dictionary)
{
string query = "SELECT * FROM mytable WHERE db_id=?";
var command = new OleDbCommand(query, connection);
//command.Parameters.Add(new OleDbParameter("@ID", pair.Value));
command.Parameters.Add("?", OleDbType.BSTR).Value = pair.Value;
var reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader[0].ToString());
}
reader.Close();
}
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这给了我"给出一个或多个必需的Parameteres没有值"错误.如果我尝试现在评论的行
command.Parameters.Add(new OleDbParameter("@ID", pair.Value));
Run Code Online (Sandbox Code Playgroud)
并评论另一方,结果完全相同.
但是,如果我同时使用这两行,那么阅读器会读取我的表格列中的每个条目,而不仅仅是与pair.Value的所需匹配.
KeyValuePair只是一个字符串id的元组,它来自我的程序作为一个键,它在数据库中的相应id作为值.
我很感谢任何帮助或建议.
c# ×4
angular ×1
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
dotnet-test ×1
function ×1
javascript ×1
odata ×1
oledbcommand ×1
testing ×1
tfs ×1
tfs2010 ×1
xunit ×1