需要在 webapi 中传递带有参数的 URL

本文关键字:参数 URL webapi | 更新日期: 2023-09-27 17:56:48

我有以下URL来传递不同的API。

/shared/rendererjob -- I done
/shared/rendererjob/{jobId} -- I done
/shared/rendererjob/{jobId} -- done
/shared/rendererjob/{jobId}/status -- done
/shared/renderer/documentconverter/document -- I done
/shared/renderer/documentconverter/storage -- I done
/shared/renderer/documentconverter/callback -- I done
/shared/rendererhealth?q={level} -- **I dont know how to do this one**

如何为此编写webconfig.cs --/shared/rendererhealth?q={level}

我的配置代码如下。

        config.Routes.MapHttpRoute(
            name: "RendererApi",
            routeTemplate: "shared/{controller}/{renderGUID}",
            defaults: new { action = "rendererJob", renderGUID =
                            RouteParameter.Optional     }
        );
        config.Routes.MapHttpRoute(
            name: "RendererAPiStatus",
            routeTemplate: "shared/{controller}/{jobid}/status",
            defaults: new { action = "getJobStatus", jobid = RouteParameter.Optional }
        );
        config.Routes.MapHttpRoute(
            name: "DocumentConverterApi",
            routeTemplate: "shared/renderer/{controller}/{action}"
        );

上面的代码适用于我所做的工作。请让我知道如何使用参数配置控制器。

**How to achieve this path --       
 http://localhost:12345/shared/rendererhealth?q={level}**

需要在 webapi 中传递带有参数的 URL

由于您的路由似乎非常依赖于控制器,因此我要做的第一件事是更改现有路由,如下所示:

config.Routes.MapHttpRoute(
    name: "RendererApi",
    routeTemplate: "shared/rendererjob/{renderGUID}",
    defaults: new { action = "rendererJob", 
        renderGUID = RouteParameter.Optional,
        controller="rendererJob"     }
    );
config.Routes.MapHttpRoute(
    name: "RendererAPiStatus",
    routeTemplate: "shared/rendererjob/{jobid}/status",
    defaults: new { action = "getJobStatus",
        controller="rendererjob" }
    );
config.Routes.MapHttpRoute(
    name: "DocumentConverterApi",
    routeTemplate: "shared/renderer/documentconverter/{action}",
    defaults: new { controller="documentconverter" }
    );

请注意,您不能在路由中间使用可选参数,因此我更改了您的 RendererAPiStatus 路由,以便 jobid 是必需的。

接下来,在末尾为新资源添加新路由:

config.Routes.MapHttpRoute(
    name: "RendererHealthApi",
    routeTemplate: "shared/rendererhealth",
    defaults: new { controller="rendererhealth" }
    );

然后,您可以添加新的控制器方法:

public class RendererHealthController : ApiController
{
    public string Get(int q)
    {
        return "hello";
    }
}

请注意,上述假设您使用的是 GET 请求,并且 {level} 是一个整数。