You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET WebForms老开发者:适配.NET Maui的ASMX替代Web API选型咨询

适配.NET MAUI的ASMX替代方案(聚焦MVVM,避开MVC)

针对你维护ASMX旧系统、转向.NET MAUI且希望避开MVC专注MVVM的需求,以下是最贴合的方案:

1. 首选:ASP.NET Core Minimal API(完全避开MVC,轻量高效)

Minimal API是ASP.NET Core中最轻量化的服务构建方式,无需MVC的Controller/Action结构,和你熟悉的ASMX [WebMethod]风格逻辑类似但更现代,完美适配你的避MVC需求。

  • MAUI MVVM适配:在MAUI的ViewModel中通过HttpClient调用API端点,将数据绑定到View,完全遵循MVVM的视图-视图模型-数据分离原则。
  • 代码示例:
    服务端(Minimal API):
    var builder = WebApplication.CreateBuilder(args);
    // 注册公司数据库上下文(以EF Core为例)
    builder.Services.AddDbContext<CompanyDbContext>(options => 
        options.UseSqlServer(builder.Configuration.GetConnectionString("CompanyDb")));
    var app = builder.Build();
    
    // 替代ASMX的[WebMethod],定义数据查询端点
    app.MapGet("/api/orders", async (CompanyDbContext db) =>
        await db.Orders.Where(o => o.IsActive).ToListAsync());
    
    app.Run();
    
    MAUI ViewModel(基于CommunityToolkit.Mvvm,微软官方推荐的MVVM工具):
    using CommunityToolkit.Mvvm.ComponentModel;
    using CommunityToolkit.Mvvm.Input;
    using System.Collections.ObjectModel;
    using System.Net.Http.Json;
    
    namespace MauiApp.ViewModels;
    
    public partial class OrdersViewModel : ObservableObject
    {
        private readonly HttpClient _httpClient;
        [ObservableProperty]
        private ObservableCollection<Order> _orders = new();
    
        public OrdersViewModel(HttpClient httpClient)
        {
            _httpClient = httpClient;
        }
    
        [RelayCommand]
        private async Task LoadOrders()
        {
            var orders = await _httpClient.GetFromJsonAsync<List<Order>>("/api/orders");
            if (orders != null)
            {
                Orders = new ObservableCollection<Order>(orders);
            }
        }
    }
    
    注:ObservableObject和RelayCommand自动实现INotifyPropertyChanged和命令绑定,无需手动编写重复代码。

2. 备选:ASP.NET Core Web API(仅用API控制器,不涉及MVC视图)

如果Minimal API的极简风格让你不适应,可以选择ASP.NET Core Web API,但只使用API控制器(不添加MVC视图相关包),同样能避开MVC的核心视图层。

  • 服务端代码示例:
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.EntityFrameworkCore;
    
    [ApiController]
    [Route("api/[controller]")]
    public class ProductsController : ControllerBase
    {
        private readonly CompanyDbContext _dbContext;
    
        public ProductsController(CompanyDbContext dbContext)
        {
            _dbContext = dbContext;
        }
    
        [HttpGet]
        public async Task<IActionResult> GetActiveProducts()
        {
            var products = await _dbContext.Products.Where(p => p.IsInStock).ToListAsync();
            return Ok(products);
        }
    }
    
    MAUI端的ViewModel实现和Minimal API方案完全一致,因为都是基于HTTP请求的调用。

3. 核心适配建议

  • 数据库访问统一:用EF Core替代你之前可能使用的ADO.NET或LINQ to SQL,EF Core同时支持ASP.NET Core服务端和.NET MAUI客户端,可复用数据模型和查询逻辑。
  • 避开MVC的关键:不要安装Microsoft.AspNetCore.Mvc.Razor等MVC视图相关包,仅引用Microsoft.AspNetCore.Mvc.Core或Minimal API的基础包,确保服务端完全不涉及MVC视图层。
  • MVVM工具选型:优先使用CommunityToolkit.Mvvm,这是.NET生态中最成熟的MVVM框架,无需手动实现接口,专注业务逻辑即可。
  • 认证迁移:如果旧ASMX系统使用Windows认证、表单认证或自定义认证,ASP.NET Core可无缝迁移对应逻辑,MAUI端的HttpClient可通过配置请求头实现认证。

内容的提问来源于stack exchange,提问作者Systellence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:53:24