2021-10-15 11:09

讓 Net core 3.1 的 PageModel 可以用 POST 的參數決定 handler

Razor Page 的 handler 預設只能從 URL 的 QueryString 參數 ?handler=XXXX 決定要去的 handler,這有點不方便,因為我會用 <button type="submit" name="handler" value="Delete"> 的方式去傳送 handler,所以需要用 POST 也能決定 handler。

為了做到這點可以在 Startup.cs 進行 middleware 配置:


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //...

    /* 使用 FormData 給路由 handler */
    app.Use((context, next) =>
    {
        HttpRequest req = context.Request;

        /* 判斷是否為 POST,且具有 handler 參數,然後覆蓋 Route 的值 */
        if (req.HasFormContentType && req.Form.ContainsKey("handler"))
        { req.RouteValues["handler"] = req.Form["handler"]; }

        return next();
    });

    //...
}

0 回應: