有两个方法可被调用,一个是返回json,一个是xml。
getJson(string key) getXml(string key)
调用时需要判断key是否有效,有效返回数据,无效返回key已经失效的提示。如果还有其他的判断,可能还要返回其他提示。
我目前不知道怎么返回自定义的这些错误信息。求大神指点
其实你可以返回值定义一个数据节点,标示是否处理成功,以及不成功的原因描述,下面简单的给你定义一个数据模型
//// 请求处理结果model
public class MresponseResult<T>{
//// 处理结果编码(自定义约定枚举编码值)
public sting ResultCode{get;set}
//// 处理结果描述信息
public string ResultCodeMes{get;set;}
//// 处理到的具体数据信息
public list<T> DataValue{get;set;}
}
//// 纯收写的代码,你先运行看看有没有错误
感谢回复,方法可行,已经解决。
基于asp.net的 不必多说,到异常接口拦截即可,出什么错扔什么Exception(可以自己加一个派生Exception表示业务内的),然后想怎么输出就怎么输出异常 —— 可以直接参见503。很这些普遍的要把 result 非要包一个 Result类的(类似),完全多余,代码更多,开销更多,简单的事情复杂话,他们有一大把理由 —— 这是业务异常,难道http的100错误 跟 400错误也是相提并论,正是http把错误都包含在一个地方,让使用更简单!
至于纯代码的http(如http层,tcp层)实现就更方便简单了,自己控制异常,直接只要符合http 规范,想怎么控制都很easy。
eg.
protected override dynamic Modify(HttpListenerContext context, Bill entity)
{
var bill = Db.Bill.Find(entity.Id);
if (!string.IsNullOrEmpty(bill.Remover)) throw new Warn("已废弃单据不能审核");
if (!string.IsNullOrEmpty(bill.Balancer)) throw new Warn("已结算单据不能审核");
if (!string.IsNullOrEmpty(bill.Checker)) throw new Warn("已审核单据不能审核");
var currentUser = context.GetSession();
bill.Checker = currentUser.User;
bill.CheckeDate = DateTime.UtcNow;
Db.SaveChanges();
return bill;
}
拦截处.//DoWarn 相当于asp.net 中 xxResult,比如JsonResult,HtmlResult之类的
catch (Warn warn)
{
context.Over(new DoWarn(warn.Message));
}
catch (DbEntityValidationException ex)
{
var errorMsg = new StringBuilder();
foreach (var dbEntityValidationResult in ex.EntityValidationErrors){foreach (var dbValidationError in dbEntityValidationResult.ValidationErrors){errorMsg.AppendLine(dbValidationError.ErrorMessage);} }
context.Over(new DoWarn(errorMsg.ToString()));
Loger.Log.Error(errorMsg,ex);
}
catch (Exception ex)
{
var error = GetInnerException(ex);
context.Over(new DoError(error.Message));
Loger.Log.Error(ex);
}
感谢您的回复。问题已经解决