ASP.NET MVC动态WebApi

QJW630751892 2017-09-29 03:58:44
请教各位大神,问题如下:
首先我现在网站已经开发好了,接口目前之后标准接口,用来接收数据的,但是日后可能需要验证一些非标准的数据,我不可能再次拿回来开发,因此想请教一下有什么技术可以实现动态接口(主要指动态验证,可以交给运维来写)。
注:因为最终进数据库是一样的,只是在第一层接收数据时要实现不同的数据格式验证。另外问题没有描述清楚,欢迎提问。
...全文
381 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 版主 2017-09-30
  • 打赏
  • 举报
回复
引用 2 楼 QJW630751892 的回复:
[quote=引用 1 楼 hanjun0612 的回复:] 那就使用 ActionFilterAttribute 下面的例子和你要的不太一样。 但是原理是一样的。主要是数据进来后,先去判断,操作完后,进入action http://blog.csdn.net/hanjun0612/article/details/53514218
我是要验证整个model的,而且不同的地方来的数据,验证的必须字段不一样,我希望实现,注入不同的model实现不同的验证,而这些model都继承自一个父类就行,这样可以实现么?[/quote] 那你是怎么注入不同的model的呢? webapi接口拿到实体参数时,对象就已经定了。 除非你手动从request.form中去映射你的实体。
  • 打赏
  • 举报
回复
插件热更新,可以作为电信级的网络服务器系统的一个最基本的功能。在系统不停机的情况下,服务系统要能够随时进行热更新,并且服务器集群允许各个服务器上有不同版本插件、并最终是逐步地(而不是一次性地)更新到最新版本。
  • 打赏
  • 举报
回复
所谓脚本,也还是程序,只是思维和概念上硬要制造局限而已。 假设以.net为目标,那么你就是为自己的系统留一个后门(或者干脆就堂而皇之地作为基本功能),能够动态上传和动态更新插件即可。而动态更新插件的机制叫做 MEF,上传文件的机制不用我说明了。
正怒月神 版主 2017-09-30
  • 打赏
  • 举报
回复
我在#1已经给了思路了。
但我不确定能否实现。因为我自己也不清楚如何在参数传进来的时候,确定是哪个model。

我给一下测试用例以及问题。
首先编写一个filter
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class APIFilterAttribute : ActionFilterAttribute
{

public override void OnActionExecuting(HttpActionContext actionContext)
{
//string a = "统一处理";
//var q = HttpContext.Current.Session["a"] == null ? "" : HttpContext.Current.Session["a"].ToString();

var q = (Father)actionContext.ActionArguments["f"];

Strategy s = new Strategy(q);
string result = s.Done();
}


}


然后创建一个继承关系的群体

//简单的策略模式
public class Strategy
{
Father f;
public Strategy(Father f) { this.f = f; }
public string Done()
{
return f.Done();
}
}

//父类
public class Father
{
public string name { get; set; }
public int age { get; set; }
public virtual string Done()
{
return "我是老爸";
}
}
//子类
public class Son1 : Father
{
public string hobby { get; set; }
public override string Done()
{
return "我是Son1,我的属性是hobby";
}
}
//子类
public class Son2 : Father
{
public string test { get; set; }
public override string Done()
{
return "我是Son2,我的属性是test";
}
}


接着增加一个api接口
[APIFilter]
[HttpPost]
public string Post(Son1 f)
{

return "123";
}


前台调用就不贴了
展示一下结果(一个是public string Post(Son1 f),一个是public string Post(Son2 f))
如果你能注入不同model,那么问题也可以迎刃而解。不过我没想到太好的办法。
下面的实例,由于post的参数已经设定,所以假设你传递son1 结果在post的参数使用son2,那么会发觉son1的hobby属性没有了,这个就不解释了。
但是你在request.form中还是能获取到。但是如何把request.form中的数据转换到制定类型,也是一个麻烦。

QJW630751892 2017-09-29
  • 打赏
  • 举报
回复
引用 3 楼 chb345536638 的回复:
没有定个msg_type吗? 没的话大概只能遍历去转换了
有MessageType的,请问怎么搞比较好?
QJW630751892 2017-09-29
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
那就使用 ActionFilterAttribute 下面的例子和你要的不太一样。 但是原理是一样的。主要是数据进来后,先去判断,操作完后,进入action http://blog.csdn.net/hanjun0612/article/details/53514218
我是要验证整个model的,而且不同的地方来的数据,验证的必须字段不一样,我希望实现,注入不同的model实现不同的验证,而这些model都继承自一个父类就行,这样可以实现么?
  • 打赏
  • 举报
回复
没有定个msg_type吗? 没的话大概只能遍历去转换了
正怒月神 版主 2017-09-29
  • 打赏
  • 举报
回复
那就使用 ActionFilterAttribute 下面的例子和你要的不太一样。 但是原理是一样的。主要是数据进来后,先去判断,操作完后,进入action http://blog.csdn.net/hanjun0612/article/details/53514218

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧