Skip to content

MVC 中间件

MVC 中间件用于处理基于控制器和视图的请求分发,是实现 Web API 和页面渲染的核心组件。

注册mvc中间件

cangjie
main(): Int64 {
  
    let builder = WebHost.createBuilder()

    // 注册控制器(会自动注册路由服务)
    builder.services.addControllers() 
        .addApplicationPart("default", [TypeInfo.of<HelloController>()]) 
        
    let app = builder.build()

    app.useEndpoints { endpoints =>
        // 映射为终结点
        endpoints.mapControllers() 
    }

    app.run()

    return 0
}

编写Controller

cangjie
@Route["[controller]"] // 定义路由模板
public class HelloController <: Controller {

    // 依赖注入
    public HelloController(logger: ILogger<HelloController>) {

    }

    // FromServices: 从容器中绑定
    @HttpGet
    public func hello(@FromServices configuration: IConfiguration) {
        return "hello"
    }

    @HttpGet["{id}"]
    public func getByid(@FromRoute id: Int64) {
        return "success"
    }

    @HttpPost
    public func post(@FromBody model: HelloModel) {
        return "success"
    }

    @HttpDelete["{id}"]
    public func delete(@FromRoute id: Int64) {
        return "success"
    }

    @HttpGet["list"]
    public func getList() {
        let list = ArrayList<HelloModel>()
        list.add(HelloModel(1, "spire", 1))
        return json(list.toArray())
    }
}

// 我们提供了序列化的宏
@Serialization
public class HelloModel {    
    private var _id: ?Int64 = None
    private var _name: String = String.empty
    private var _age: Int64 = 0

    public init(id: ?Int64, name: String, age: Int64) {
        this._id = id
        this._name = name
        this._age = age
    }
}

配置选项

配置模型验证失败的响应内容

cangjie
builder.services.configure<ApiBehaviorOptions> { configureOptions => 
    configureOptions.invalidModelStateResponseFactory = {
        context => ContentResult("参数不合法", 400)
    }
}