C# asp.net mvc中的通用http结果
我已经参与了几个MVC项目,在几乎所有的项目中,我都看到了一些操作上的类似逻辑 我们经常返回这样的对象:C# asp.net mvc中的通用http结果,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,我已经参与了几个MVC项目,在几乎所有的项目中,我都看到了一些操作上的类似逻辑 我们经常返回这样的对象: public class HttpPrjNameResult<T> { public PrjNameStatus Status { get; set; } public string Message { get; set; } public T data{ get; set; } } 公共类HttpPrjNameResult{ 公共PrjNameStat
public class HttpPrjNameResult<T> {
public PrjNameStatus Status { get; set; }
public string Message { get; set; }
public T data{ get; set; }
}
公共类HttpPrjNameResult{
公共PrjNameStatus状态{get;set;}
公共字符串消息{get;set;}
公共T数据{get;set;}
}
所以我想知道:
public HttpTestResult<List<Report>> UpdateReports(IEnumerable<Reports> reports){
try{
var res = SaveReports(reports);
return new HttpTestResult<List<Report>>{
Status = TestStatus.Success,
Data = res
}
}
catch(Exception e){
logger.Error(e);
return new HttpTestResult<Object>{
Status = TestStatus.Error,
Message = "Error while saving reports"
}
}
}
公共HttpTestResult更新报告(IEnumerable报告){
试一试{
var res=保存报告(报告);
返回新的HttpTestResult{
Status=TestStatus.Success,
数据=res
}
}
捕获(例外e){
错误(e);
返回新的HttpTestResult{
Status=TestStatus.Error,
Message=“保存报告时出错”
}
}
}
我认为这种逻辑在整个项目中都很有用,我想更多的是API风格,而不是纯mvc,但仍然是。
问题是-我做错什么了吗?这是一个重新发明的轮子,而且已经有了这种逻辑的内置功能,我知道你基本上在寻找这种功能 有一种方法可以帮助您了解如何实现它。我不能说这是最佳实践,但你可以从中得到一些想法
主要思想是创建
ICommandHandler
和ICommandDispatcher
接口,帮助您将基本逻辑放在一个地方。如果我正确理解您的问题,您会问如何根据是否遇到异常返回成功或失败结果
您可能希望查看(MVC)或(Http)接口。这些过滤器将监听任何异常,并执行您定义的一些自定义操作,例如(MVC示例):
如果您使用异常过滤器来处理发生的任何异常,则您的控制器可以自由地专注于成为控制器:
[ResponseType(typeof (List<Report>))]
public IHttpActionResult UpdateReports(IEnumerable<Reports> reports)
{
var results = SaveReports(reports).ToList();
return Ok(results);
}
[ResponseType(typeof(List))]
公共IHttpActionResult更新报告(IEnumerable报告)
{
var results=SaveReports(reports).ToList();
返回Ok(结果);
}
不清楚你在问什么?您试图返回到何处?需要更多代码/上下文。你在这门课上讲的是什么情况?现在你把它弄得更糊涂了。这是webapi还是mvc?你的标题/标签是mvc,然后你说让我们假设我正在创建web api
@Alex asp.net mvc为你提供了实现APIC的能力谢谢你的回答,但我想知道还有什么。返回这样的HttpTestResult有意义吗?如果有意义,为什么MVC中没有内置功能?@ValentinVynogradskiy是的,如果您想在客户端以相同的方式处理所有响应,这很有意义。MVC提供了很好的ViewModel
功能,我相信开发人员不会从一开始就实现这些功能,因为如果您是初学者,老实说,在简单的应用程序中不需要它,这很难理解。
[ResponseType(typeof (List<Report>))]
public IHttpActionResult UpdateReports(IEnumerable<Reports> reports)
{
var results = SaveReports(reports).ToList();
return Ok(results);
}