我意识到Web API是以REST为重点的,但我仍然希望配置一个可以处理命令/响应方案的控制器方法.到目前为止,我还没有成功......有没有办法让单个API端点识别以下类结构?
[Serializable]
public abstract class Command{
public int CommandId{get; set;}
}
[Serializable]
public class RegisterNewPersonCommand:Command{
public string Name{get; set;}
}
//etc... various Command subclasses. Similar thing for Responses.
//now have a single endpoint to Handle Commands
public class CommandsController : ApiController{
public Response HandleCommand(Command command){
//handle Command based on which subclass it is
//return appropriate Response subclass
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,似乎序列化系统似乎无法处理这种情况,但我希望那里有人找到了办法:)
我想将我的代码减少到更好的程度。这就是为什么我试图将 if/else 语句转换为运算符 ?:
我的实际代码如下所示:
if (resultat.CodeAlgo != null)
{
worksheet.Cells[ligne, 7].Value = resultat.CodeAlgo.ToString();
}
else
{
worksheet.Cells[ligne, 7].Value = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
我尝试转换为:
resultat.CodeAlgo != null
? worksheet.Cells[ligne, 7].Value = resultat.CodeAlgo.ToString()
: worksheet.Cells[ligne, 7].Value = string.Empty;
Run Code Online (Sandbox Code Playgroud)
但它说:
只能使用赋值、调用、自增、自减、new object 语句作为语句。
我第一次使用这个运算符,我不明白为什么我的简化是错误的?
给出这个问题的简写如果陈述:C#
这有什么问题?
int userID;
Int32.TryParse(request.userID, out userID);
userID > 0 ? user = DuoUser.LoadUser(userID): ;
Run Code Online (Sandbox Code Playgroud)
它给出了错误:
only assignment call increment decrement and new object expressions can be used as a statement
Run Code Online (Sandbox Code Playgroud)
据我所知它应该工作,但有些问题?
编辑:
我也尝试过:
int userID = 0;
userID > 0 ? user = DuoUser.LoadUser(userID): null;
Run Code Online (Sandbox Code Playgroud)
但它仍然给出了同样的错误.
在PHP中,有一个三元运算符的简写:
$value = "";
echo $value ?: "value was empty"; // same as $value == "" ? "value was empty" : $value;
Run Code Online (Sandbox Code Playgroud)
在JS中还有一个等价物:
var value = "";
var ret = value || "value was empty"; // same as var ret = value == "" ? "value was empty" : value;
Run Code Online (Sandbox Code Playgroud)
但在C#中,(据我所知)只有"完整"版本有效:
string Value = "";
string Result = Value == string.Empty ? "value was empty" : Value;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:C#中的三元运算符是否有简写,如果没有,是否有解决方法?
我发现了以下问题,但他们指的是使用三元运算符作为if-else的简写:
而这一个,但它与Java有关:
使用PHP的速记样式(由于语法错误而失败)
string Value = …Run Code Online (Sandbox Code Playgroud)