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

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

  •  
  •   wangybsyuct · 32 天前 · 1552 次点击
    这是一个创建于 32 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    此外,除了自带的 mvc,这种 api 的话还有一个叫 Nancy 的很不错,试试看
    Mithril
        21
    Mithril  
       32 天前
    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  
       32 天前 via Android
    2003 用 mvc 有点麻烦,直接 aspx 或者 ashx 简单点,代码直接写页面,都不用编译,也方便修改
    alwaysol
        23
    alwaysol  
       32 天前
    用 nodejs 实现最简单,直接定义接口名叫 def.php,想要什么路由随便加
    wangybsyuct
        24
    wangybsyuct  
    OP
       15 天前
    @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   ·   实用小工具   ·   3042 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 13:16 · PVG 21:16 · LAX 05:16 · JFK 08:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.