假设我使用ASP.NET有web api应用程序。在其中一个操作中,我检查是否可以激活给定用户的免费试用期。现在从一个角度来看,这个动作的结果要么成功要么不成功。但是如果结果不成功,我想告知客户端为什么请求被拒绝,然后客户端可以决定该怎么做。
此操作中有多个if-checks,并且每个if-checks都可以拒绝传入的请求。此外,我们也可以有不同的成功结果条件。
返回这些不同条件的正确方法是什么,以便客户可以轻松区分它们?
我现在正在做的事情是这样的:
public IHttpActionResult ActivateFreeTrial()
{
BaseResult result = new BaseResult(); // This class has a property called Status
if(!FirstCondition)
{
// Unsuccessful
result.Status = 90;
return Ok(result)
}
if(!SecondCondition)
{
// Unsuccessful
result.Status = 91;
return Ok(result)
}
// Some more checks...
if(!SixthCondition)
{
// Successful
result.Status = 1;
return Ok(result);
}
else {
// Successful
result.Status = 2;
return Ok(result);
}
}
客户需要知道哪个条件产生了结果,这就是为什么我要分配一个数字来区分不同的条件。所以在客户端我可以做类似的事情:
CallActivateFreeTrial()
.then(function(res){
if (res.Status == 1)
{
// Successful result but with status 1
}
else if (res.Status == 2)
{
// Successful result but with status 2
}
else if (res.Status == 90)
{
// Unsuccessful result but with status 90
}
else if (res.Status == 91)
{
// Unsuccessful result but with status 91
}
}, function(error){
})
我几乎不认为我现在所做的事情被认为是一种很好的做法。有没有更好的方法将不同的条件结果返回给客户?
答案 0 :(得分:0)
我想知道你在哪里获得!FirstCondition,!SecondCondition值确认我的答案,但我认为这是一个不好的做法。如果您有不同的结果,那么您将更改ActivateFreeTrial方法。我相信战略或国家模式可以帮助你。所以不是返回"状态代码"对于您的客户端,您可以返回客户端应该调用的函数的名称。
策略模式
http://www.dofactory.com/net/strategy-design-pattern
状态模式