# 设置HTTP服务路由

server.path of the application. 应用的上下文路径,也可以称为项目路径,是构成url地址的一部分。 如下设置后,路由定义 router.GET("/info"...) , 访问URL为: http://localhost:8080/app/info , 而不是http://localhost:8080/info

yoyogo:
  application:
    name: yoyogo_demo_dev
    metadata: "develop"
    server:
      type: "fasthttp"
      address: ":8080"
      path: "app"
      max_request_size: 2096157
      mvc:
        template: "/v1/{controller}/{action}"
...
...
app.UseEndpoints(registerEndpointRouterConfig)
...
//region endpoint 路由绑定函数
func registerEndpoints(rb router.IRouterBuilder) {
	Endpoints.UseHealth(rb)
	Endpoints.UseViz(rb)
	Endpoints.UsePrometheus(rb)
	Endpoints.UsePprof(rb)
	Endpoints.UseJwt(rb)

	rb.GET("/error", func(ctx *context.HttpContext) {
		panic("http get error")
	})

	//POST 请求: /info/:id ?q1=abc&username=123
	rb.POST("/info/:id", func(ctx *context.HttpContext) {
		qs_q1 := ctx.Query("q1")
		pd_name := ctx.Param("username")

		userInfo := &UserInfo{}

		_ = ctx.Bind(userInfo) // 手动绑定请求对象

		strResult := fmt.Sprintf("Name:%s , Q1:%s , bind: %s", pd_name, qs_q1, userInfo)

		ctx.JSON(200, context.H{"info": "hello world", "result": strResult})
	})

	// 路由组功能实现绑定 GET 请求:  /v1/api/info
	rb.Group("/v1/api", func(router *router.RouterGroup) {
		router.GET("/info", func(ctx *context.HttpContext) {
			ctx.JSON(200, context.H{"info": "ok"})
		})
	})

	// GET 请求: HttpContext.RequiredServices获取IOC对象
	rb.GET("/ioc", func(ctx *context.HttpContext) {
		var userAction models.IUserAction
		_ = ctx.RequiredServices.GetService(&userAction)
		ctx.JSON(200, context.H{"info": "ok " + userAction.Login("zhang")})
	})
}

# 设置MVC路由模板

mvc.template 其中 {controller} 和 {action} 为固定参数,表示控制器和执行方法;按URL方式填写。

type UserController struct {
	mvc.ApiController
	userAction models.IUserAction
}

func NewUserController(userAction models.IUserAction) *UserController {
	return &UserController{userAction: userAction}
}

func (controller UserController) GetInfo() mvc.ApiResult {
	return controller.OK(controller.userAction.Login("zhang"))
}



package main
import (
	yoyogo "github.com/yoyofx/yoyogo/web"
        ......
)

func main() {
    configuration := abstractions.NewConfigurationBuilder().
		AddEnvironment().
		AddYamlFile("config").Build()
		
    yoyogo.NewWebHostBuilder().
           UseConfiguration(configuration).
           Configure(func(app *yoyogo.WebApplicationBuilder) {
               app.UseMvc(func(builder *mvc.ControllerBuilder) {
                   builder.AddController(contollers.NewUserController)
               })
          }).Build().Run()
}