V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wangybsyuct
V2EX  ›  C#

想用 c#的 mvc 实现一个功能.

  •  
  •   wangybsyuct · 2024-11-22 09:14:37 +08:00 · 3634 次点击
    这是一个创建于 365 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事情是这样的,服务器比较老 windows server2003 ,上面运行的 php 版本有漏洞,但是 php 无法升级,操作系统更换也非常困难。 想使用 c#的 MVC 实现里面的 php 程序的功能,服务器是提供接口,接口形式不能变。 接口类似于 http://webserver.com/abc/def.php?code=abc123321 我想用 c#的 MVC 实现这个接口,请教大家 mvc 的程序和配置该如何实现? mvc 的程序一些,配置不是很熟。 感谢感谢

    24 条回复    2024-12-09 14:55:59 +08:00
    klo424
        1
    klo424  
       2024-11-22 09:19:53 +08:00
    外包吗?可以联系我
    StoneHuLu
        2
    StoneHuLu  
       2024-11-22 09:34:42 +08:00
    .net 的 api 和 mvc 框架都是开箱即用的,有啥需要配置的。。
    ltmst
        3
    ltmst  
       2024-11-22 09:42:29 +08:00
    你是想自己开发?
    这个是 webapi 文档 https://dotnet.microsoft.com/zh-cn/apps/aspnet/apis ,配合 vs 随便看两眼基本就会
    系统太旧直接 aot ,在哪都能跑
    ltmst
        4
    ltmst  
       2024-11-22 09:43:04 +08:00
    wangybsyuct
        5
    wangybsyuct  
    OP
       2024-11-22 09:47:35 +08:00
    在 abcController 里无法定义 ActionResult def.php(),这么写是无法通过编译。https://imgur.com/a/ZoIfFQ3
    wangybsyuct
        6
    wangybsyuct  
    OP
       2024-11-22 10:08:57 +08:00
    @gbw1992 好像不行,操作系统太老了
    jifengg
        7
    jifengg  
       2024-11-22 10:11:14 +08:00
    [HttpGet("def.php")]
    ActionResult xxxx(参数)
    wangybsyuct
        8
    wangybsyuct  
    OP
       2024-11-22 10:11:30 +08:00
    @StoneHuLu 在 c#mvc 程序里定义 ActionResult def.php(),来模拟以前的 php 访问请求,这么定义是错误的,我不知道该如何弄,才能完全模拟出这个请求。
    wangybsyuct
        9
    wangybsyuct  
    OP
       2024-11-22 10:28:58 +08:00
    @jifengg [HttpGet("def.php")]这样写,提示错误,错误是《“System.Web.Mvc.HttpGetAttribute”不包含采用“1”个参数的构造函数》,可能是 mvc 的版本比较低,操作系统比较老,这个版本几乎 c#能用的最高版本了,我改为[HttpGet] [Route("def.php")]也不行,提示 Route 缺少 using 指令或程序集引用。
    jifengg
        10
    jifengg  
       2024-11-22 10:38:00 +08:00
    @wangybsyuct 你按你使用的版本,搜索相关的“自定义路由”“自定义 path”等关键词去找吧。这种小问题总会有解决办法的
    ltmst
        11
    ltmst  
       2024-11-22 10:44:32 +08:00
    @wangybsyuct #5 这家伙,第一次写代码么? 建议先读读文档再动手。
    lzzy1994
        12
    lzzy1994  
       2024-11-22 10:48:15 +08:00
    lzzy1994
        13
    lzzy1994  
       2024-11-22 10:52:22 +08:00
    889434
        14
    889434  
       2024-11-22 11:46:20 +08:00
    第一步:.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 调试代码
    889434
        15
    889434  
       2024-11-22 11:59:15 +08:00
    @ahswch 另外 你发的 controler 里配置的路由是和 Views 文件夹下的页面一一对应的,一般用来设置页面 title 或者做 seo 关键词设置
    skydcnmana
        16
    skydcnmana  
       2024-11-22 12:31:05 +08:00
    改 mvc 的路由配置是可以的,实在不行你就 url 转发
    ddup
        17
    ddup  
       2024-11-22 12:47:39 +08:00
    自定义一下路由就行了,2003 系统你可以搜一下 .net framework 4 mvc 的路由配置。
    wellerman
        18
    wellerman  
       2024-11-22 13:13:01 +08:00
    用 requestRouter_x86.msi rewrite_x86_zh-CN.msi 这两个工具, 新 API 随便用什么写。
    quan01994
        19
    quan01994  
       2024-11-22 13:45:29 +08:00
    a33291
        20
    a33291  
       2024-11-22 14:04:49 +08:00
    这么老的系统大概率用 netcore 会有问题,我们部署的最低系统也是 server 2008

    用以前的 netframework 应该是可以的,关于写法问题先读文档

    此外,除了自带的 mvc,这种 api 的话还有一个叫 Nancy 的很不错,试试看
    Mithril
        21
    Mithril  
       2024-11-22 14:46:06 +08:00
    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 了。
    ttyn
        22
    ttyn  
       2024-11-22 15:19:15 +08:00 via Android
    2003 用 mvc 有点麻烦,直接 aspx 或者 ashx 简单点,代码直接写页面,都不用编译,也方便修改
    alwaysol
        23
    alwaysol  
       2024-11-22 17:01:42 +08:00
    用 nodejs 实现最简单,直接定义接口名叫 def.php,想要什么路由随便加
    wangybsyuct
        24
    wangybsyuct  
    OP
       348 天前
    @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#,还是很自由的。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2572 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 12:05 · PVG 20:05 · LAX 04:05 · JFK 07:05
    ♥ Do have faith in what you're doing.