事情是这样的,服务器比较老 windows server2003 ,上面运行的 php 版本有漏洞,但是 php 无法升级,操作系统更换也非常困难。 想使用 c#的 MVC 实现里面的 php 程序的功能,服务器是提供接口,接口形式不能变。 接口类似于 http://webserver.com/abc/def.php?code=abc123321 我想用 c#的 MVC 实现这个接口,请教大家 mvc 的程序和配置该如何实现? mvc 的程序一些,配置不是很熟。 感谢感谢
1
klo424 36 天前
外包吗?可以联系我
|
2
StoneHuLu 36 天前
.net 的 api 和 mvc 框架都是开箱即用的,有啥需要配置的。。
|
3
gbw1992 36 天前
你是想自己开发?
这个是 webapi 文档 https://dotnet.microsoft.com/zh-cn/apps/aspnet/apis ,配合 vs 随便看两眼基本就会 系统太旧直接 aot ,在哪都能跑 |
4
gbw1992 36 天前
|
5
wangybsyuct OP 在 abcController 里无法定义 ActionResult def.php(),这么写是无法通过编译。https://imgur.com/a/ZoIfFQ3
|
6
wangybsyuct OP @gbw1992 好像不行,操作系统太老了
|
7
jifengg 36 天前
[HttpGet("def.php")]
ActionResult xxxx(参数) |
8
wangybsyuct OP @StoneHuLu 在 c#mvc 程序里定义 ActionResult def.php(),来模拟以前的 php 访问请求,这么定义是错误的,我不知道该如何弄,才能完全模拟出这个请求。
|
9
wangybsyuct OP @jifengg [HttpGet("def.php")]这样写,提示错误,错误是《“System.Web.Mvc.HttpGetAttribute”不包含采用“1”个参数的构造函数》,可能是 mvc 的版本比较低,操作系统比较老,这个版本几乎 c#能用的最高版本了,我改为[HttpGet] [Route("def.php")]也不行,提示 Route 缺少 using 指令或程序集引用。
|
10
jifengg 36 天前
@wangybsyuct 你按你使用的版本,搜索相关的“自定义路由”“自定义 path”等关键词去找吧。这种小问题总会有解决办法的
|
11
gbw1992 36 天前
@wangybsyuct #5 这家伙,第一次写代码么? 建议先读读文档再动手。
|
12
lzzy1994 36 天前
|
13
lzzy1994 36 天前
|
14
ahswch 36 天前
第一步:.net4.6 配置路由(我这边路径是 项目目录/App_Start/RouteConfig.cs)
routes.MapHttpHandlerRoute("v2exTest", "abc/def.php", "~/t/testHandler.ashx"); 第二步:新建一般处理程序 路径:/t/testHandler.ashx 第三步:一般处理程序接受 code 参数 public void ProcessRequest(HttpContext context) { var code = context.Request["code"]; context.Response.ContentType = "text/plain"; context.Response.Write(code); } 第四步:测试 项目部署到服务器后访问 /abc/def.php?code=abc123321 返回 abc123321 注意:这种路由配置后,本地调试访问会 404 ,部署到服务器正常,建议在服务器使用 vs 调试代码 |
16
skydcnmana 36 天前
|
17
ddup 36 天前
自定义一下路由就行了,2003 系统你可以搜一下 .net framework 4 mvc 的路由配置。
|
18
wellerman 36 天前
用 requestRouter_x86.msi rewrite_x86_zh-CN.msi 这两个工具, 新 API 随便用什么写。
|
19
quan01994 36 天前
|
20
a33291 36 天前
这么老的系统大概率用 netcore 会有问题,我们部署的最低系统也是 server 2008
用以前的 netframework 应该是可以的,关于写法问题先读文档 此外,除了自带的 mvc,这种 api 的话还有一个叫 Nancy 的很不错,试试看 |
21
Mithril 36 天前
Server 2003 只能用.NET Framework 3.5 或 4 ,4.5 都不行。但这需要你安装才可以,自带的是.NET Framework 2 。
https://learn.microsoft.com/en-us/dotnet/framework/migration-guide/versions-and-dependencies 你得找老版本的 Visual Studio 和 Framework ,但 4 应该也足够写你这 WebAPI 了。 |
22
ttyn 36 天前 via Android
2003 用 mvc 有点麻烦,直接 aspx 或者 ashx 简单点,代码直接写页面,都不用编译,也方便修改
|
23
alwaysol 36 天前
用 nodejs 实现最简单,直接定义接口名叫 def.php,想要什么路由随便加
|
24
wangybsyuct OP @gbw1992
@jifengg @lzzy1994 @ahswch @ahswch @skydcnmana @ddup @wellerman @quan01994 @a33291 @Mithril 感谢大家的提出的宝贵意见,特别是 ddup 和 Mithril 。 最后解决了,是路由的问题,解决办法比较麻烦,windows2003 带的 iis 是 6.0 ,把网站 [属性] 里 [主目录] 的配置[映射]里加入.php,可执行文件填入 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 。 这样 IIS 就认为 php 文件是一个自己要解析的文件了,自己写的 mvc 主程序里 Global.asax.cs 才会获取路由。 但是 IIS 版本和 visual studio 2010 的调试模式处理方式不同。 visual studio 2010 的调试模式下,只要在路由 routes.MapRoute 里"{controller}/{action}/{id}",改为"{controller}/{action}.php/{id}",就可以实现。 但是在 IIS 里不行,虽然获取到路由,但是不认,无法抛弃.php,只解析 action 。 后来在 Global.asax.cs 里加入 protected void Application_BeginRequest(object sender, EventArgs e),里面使用 Request.Url.PathAndQuery 获取整个链接参数, 这里把.php 的 action 强制 HttpContext.Current.RewritePath ,特别神奇的是,无论是 Get 还是 POST 参数,都能完整地传递过去。 这里的坑是 vs2010 调试模式和 IIS 是不同的。 vs2010 使用.net 版本是 4.0,带的 mvc 版本是 2.0 ,本想升级一下 mvc 版本,因为想用 Razor ,后来怕又出现什么坑,就放弃了,使用默认的 aspx ,里面可以写 c#,还是很自由的。 |