我有一个函数,它是外部REST Web API的包装器。在我的函数中,我正在检查所需的参数,如果它们在那里,那么我发出请求并返回数据。如果缺少必需参数,则记录缺失参数的名称并将状态返回为失败。
我已将缺少参数部分的日志记录提取到函数中,因为它将在函数中多次调用。这是我的代码:
public string WrapFunc(Dictionary<string, string> parameter)
{
//Check for required params
if (parameter.ContainsKey("Param1") && !string.IsNullOrEmpty(parameter["Param1"]))
{
objWebAPiRequest.Param1 = parameter["Param1"];
}
else
{
LogRequiredParameterError("Param1");
response = "FAILURE";
return response;
}
}
private void LogRequiredParameterError(string parameterName)
{
//Logging the missing parameter name to db
}
我正在寻找一种方法来封装响应在LogRequiredParameterError
方法中的返回,或者更好的方式是返回失败消息而不重复自己。有什么建议吗?
答案 0 :(得分:0)
随着时间的推移将缺少的参数添加到列表中,然后在方法结束时处理它们(并将响应设置为“FAILURE”一次)。
public string WrapFunc(Dictionary<string, string> parameter)
{
var response = "SUCCESS";
var missingParams = new List<string>();
//Check for required params
if (parameter.ContainsKey("Param1") && !string.IsNullOrEmpty(parameter["Param1"]))
{
objWebAPiRequest.Param1 = parameter["Param1"];
}
else
{
// Add the name of the missing param to a list
missingParams.Add("Param1");
}
if (missingParams.Any())
{
// Log all the missing parameters and set response to "FAILURE"
foreach (var p in missingParams)
LogRequiredParameterError(p);
response = "FAILURE";
}
return response;
}
private void LogRequiredParameterError(string parameterName)
{
//Logging the missing parameter name to db
}
答案 1 :(得分:0)
嗯,它只需要2行代替,但你可以这样做:
public string WrapFunc(Dictionary<string, string> parameter)
{
//Check for required params
bool hasAllParams = true;
hasAllParams = CheckParam(parameter, "Param1") && hasAllParams;
//hasAllParams = CheckParam(parameter, "Param2") && hasAllParams; etc.
if (hasAllParams)
{
//proceed normally
response = "SUCCESS"; //might be worth making it a const
}
else
{
response = "FAILURE";
}
return response;
}
private bool CheckParam(Dictionary<string, string> parameters, string paramName)
{
if (!parameters.ContainsKey(paramName) || string.IsNullOrEmpty(parameters[paramName]))
{
LogRequiredParameterError(paramName);
return false;
}
return true;
}
或者,你可以为其他参数编写特定的检查函数,如果它们有不同的条件而不是空的。
回答你原来的问题 - 不,没有办法调用一个方法并强制它在调用者中return
。