C# Web API 路由前缀

3

我有一个运行在WPF C#应用程序中的Web API。我已经使用Owin来实现它。如果我使用/api前缀发送请求,则它按照我的预期工作。

http://localhost:8080/api/test/config?no=7

然而,我需要去掉 /api 前缀。如果我尝试下面的请求,在我尝试下面的示例代码时它不起作用。
http://localhost:8080/test/config?no=7

是否有可能从请求中删除api单词?

这是我的代码:

WebApp.Start<Startup>(url: "http://*:8080/");

    class Startup
    {
        Type ValuesControllerType = typeof(TestController);

        public void Configuration(IAppBuilder Builder)
        {
            var Instance = new HttpConfiguration();

            Instance.MapHttpAttributeRoutes();

            Instance.Routes.MapHttpRoute(
               name: "DefaultApi",
               routeTemplate: "{controller}/{action}/{request}",
               defaults: new { request = RouteParameter.Optional }
           );

            Builder.UseWebApi(Instance);
        }
    }

    [RoutePrefix("test")]
    public class TestController : ApiController
    {    
        [HttpGet]
        [Route("config")]
        public string Config(string No)
        {
            try
            {
                return No;
            }
            catch (Exception e)
            {
                return string.Empty;
            }
        }
    }

我尝试了这篇文章中的答案:C# web api route for a webservice,但是没有成功。
我收到以下错误信息:
HTTP Error 503. The service is unavailable.

当使用[RoutePrefix("test")]时,你能否显示一个错误? - Roman Marusyk
我编辑了问题,但是出现了“服务不可用”的错误。 - Demir
2个回答

2
在 Rest api 中打开 WebApiConfig.cs 文件,您应该能够找到以下代码:
config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}"
        );

尝试将其中的api删除。

根据这里的内容,这很奇怪,它应该可以工作。请问config.MapHttpAttributeRoutes();这一行是否仍然启用?如果您在webapiconfig.cs中放置了一个调试断点,它是否仍然会进入那里,或者您只能进入您的owin类中? - Arno

1

我在.Net Core 2 WebAPI项目中遇到了同样的问题。

这是我的解决方案。

[Produces("application/json")]
[Route("[controller]")]
public class DefaultController : Controller
{
    [Route("getUser")]

    public IActionResult GetUsers()
    {
         return Ok();
    }
}

地址是 http://localhost:端口号/default/getuser


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接