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)
}
}