问题:我们正在从旧系统升级,因此解决方案受到限制。如果存在特定的查询字符串,我正在尝试路由到未经授权的控制器。如果不存在,则将用户路由到授权控制器。这是在 ASP.Net Core 2.1 上。
是否可以将控制器设置为基于查询字符串进行路由?我试过了
[/home/[action]?query={query}] -> 由于“?”导致运行时错误
[/home/[action]/{query}] - > 映射到 /home/index/1 (不是我需要的)
谢谢你的帮助!
编辑:或者,是否可以有一个单独的控制器 Action 取决于查询参数?
public IActionResult Index(){}
public IActionResult Index([FromQuery]string query){}
Run Code Online (Sandbox Code Playgroud)
路由似乎没有区分这两者。
我正在 codewars.com 上做套路,其中一个涉及一系列间隔:
(int, int)[] intervals
Run Code Online (Sandbox Code Playgroud)
我认为这等效于 KeyValuePair 数组,但是如何访问任一整数?
我只是想知道??=运算符如何在后台运行。我有两个问题。
考虑下面的例子,
string name = "John";
name ??= "George";
Run Code Online (Sandbox Code Playgroud)
1)是否等于name = name ?? "George";
2) 它是这样工作的吗,
if (name == null) {
name = "George";
}
Run Code Online (Sandbox Code Playgroud)
或者
if (name == null) {
name = "George";
}
else {
name = name;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 VS2019 并在项目设置中启用了可为空检查语义。我正在尝试使用程序集获取可执行文件的路径,如下所示:
var assembly = Assembly.GetEntryAssembly();
if (assembly == null)
{
throw new Exception("cannot find exe assembly");
}
var location = new Uri(assembly.GetName().CodeBase);//doesn't compile.
Run Code Online (Sandbox Code Playgroud)
它说,“assembly”是一个 [Assembly?] 类型,而 Uri ctor 需要一个字符串,编译错误是:
error CS8602: Dereference of a possibly null reference.
Run Code Online (Sandbox Code Playgroud)
如何修复我的代码以使其编译?非常感谢。
我有一个列表,我想要用逗号分隔 [] 内的项目
输入是
List<string> inputString = new List<string>() { "1", "2", "3", "4" };
Run Code Online (Sandbox Code Playgroud)
输出:
[1],[2],[3],[4]
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何在没有 foreach 循环的情况下实现这一目标。我想使用 linq 查询。
我已尝试以下步骤但不起作用
inputString.Aggregate("", (str1, str2) => '[' + str1+ ']' + "," + '[' + str2+ ']');
Run Code Online (Sandbox Code Playgroud)
有人能帮我解决这个问题吗?
可以这样转换:
int x = 1;
string xString;
switch (x)
{
case 1:
xString = "1";
break;
case 2:
xString = "2";
break;
default:
xString = "default";
break;
}
Console.WriteLine(xString);
Run Code Online (Sandbox Code Playgroud)
进入这个:
int x = 1;
string xString = x switch
{
1 => "1",
2 => "2",
_ => "default",
};
Console.WriteLine(xString);
Run Code Online (Sandbox Code Playgroud)
但是,在多个情况下将 xString 的值设置为相同值而不为每种情况创建 lambda 行的语法是什么?
int x = 1;
string xString;
switch (x)
{
case 1:
xString = "1";
break;
case 2:
case 4:
xString = "even numbers";
break; …Run Code Online (Sandbox Code Playgroud) 我通过将相应的 *.csproj 文件修改为以下内容,将 Asp.Net Core 3.1 (MVC) 升级到 .Net 5:
<TargetFramework>net5.0</TargetFramework>
<LangVersion>9.0</LangVersion>
Run Code Online (Sandbox Code Playgroud)
现在我可以使用 C# 9目标类型功能...
string s = new('c', 3); // compiles fine
Run Code Online (Sandbox Code Playgroud)
...但我无法创建记录类:
public data class User
{
// IDE1007 The name 'data' does not exist in the current context.
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
我有一个Dictionary<int, list<T>>并且想要得到一个IEnumerable<T>,它允许我遍历字典中所有列表的所有元素。这当然应该避免处理所有元素和其他性能成本高的操作。
我对 Linq 的处理方式不太正确:
IEnumerable<T> enumerable = dict.SelectMany(list).Foreach(list.ConcatAll()).ToEnum();
Run Code Online (Sandbox Code Playgroud)
如果Linq不是最佳方式,请提出其他选择。
我有两种显示方法:一种是项目列表,另一种是项目的 HashSet。方法是一样的。有没有办法用参数类型编写方法,这样我就可以使用相同的方法,而不管传递给方法的参数是什么类型:List<T>或HashSet<T>?
方法是:
public static void DisplayList<T>(List<T> list)
{
int i = 0;
foreach (T item in list)
{
Console.Write(item.ToString());
if (i < list.Count - 1)
{
Console.Write(", ");
}
i++;
}
Console.WriteLine();
}
public static void DisplayHashSet<T>(HashSet<T> set)
{
int i = 0;
foreach (T item in set)
{
Console.Write(item.ToString());
if (i < set.Count - 1)
{
Console.Write(", ");
}
i++;
}
Console.WriteLine();
}
Run Code Online (Sandbox Code Playgroud)