小编Mar*_*kus的帖子

ASP.NET WebAPI:OData端点的通用控制器

我目前正在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控制器,我执行以下特定于实体的步骤:

  1. 在模型中注册实体.
  2. 为从EntitySetController <>派生的每个实体创建单独的Controller.

我想使用通用服务并避免尽可能多的特定于实体的实现.如果服务可以返回实体列表和相应类型,则可以轻松地自动完成第一步.这留下了第2步,因为到目前为止我需要为每个实体创建一个特定的控制器.我还想避免这种情况,并创建一个使用通用服务的通用控制器.

任何人都可以通过影响OData路由推荐解决方案吗?

odata asp.net-web-api

9
推荐指数
2
解决办法
5957
查看次数

在子路由中设置命名路由器出口的内容

在我的应用程序中,我想在两个路由器插座中显示内容,一个是主路由器插座,另一个是命名路由器。如果将两个出口都放在根级别,则可以像这样设置命名出口的内容:

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)

router-outlet angular angular-router

3
推荐指数
1
解决办法
1806
查看次数

如何将日期时间从 mvc 发送到 web api 作为参数?

现在,当我将其从 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)

c# asp.net-mvc asp.net-web-api

3
推荐指数
1
解决办法
1676
查看次数

使用InternalsVisibleTo的ASP.NET Core WebApplicationFactory在xunit中不起作用

我最初在 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 要求它的类/构造函数是公共的。

那么有人设法在没有公众部分的情况下让这项工作正常进行吗?

c# testing xunit asp.net-core dotnet-test

3
推荐指数
1
解决办法
734
查看次数

VS 2010加载项:如何获取当前的TFS项目集合

我即将编写一个Visual Studio加载项(目标环境:VS2010),该加载项应该使用户能够执行一些与工作项相关的任务.如何获取团队资源管理器中当前处于活动状态的TFS项目?我可以订阅一个事件,通知我当前项目集合何时更改?

谢谢,

马库斯

tfs visual-studio-addins visual-studio-2010 tfs2010

2
推荐指数
1
解决办法
1464
查看次数

Javascript比较功能不起作用

能不能让我知道为什么这段代码不起作用?我把值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)

javascript function

2
推荐指数
1
解决办法
62
查看次数

如何控制冒号(:) URL查询字符串?

我需要传递ID的查询字符串,其中包含冒号(:),即ABC_PD:123456.当我在查询字符串会话中使用此ID并且当它重定向到URL中的另一个页面时,它在网页上给出404没有错误发现错误.

因此,任何人都可以为此提供解决方案,以便我可以在查询字符串中传递冒号,并且当页面将重定向而没有404错误.

解决方案将非常感谢.

c# asp.net

2
推荐指数
1
解决办法
2207
查看次数

如何正确使用参数化查询?

我现在已经连续工作了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# oledbcommand

2
推荐指数
1
解决办法
110
查看次数