【问题标题】:web api method cant found from web application无法从 Web 应用程序中找到 Web API 方法
【发布时间】:2016-11-27 23:43:10
【问题描述】:

这是web应用程序中的启动破坏控制器方法:

public ActionResult PaginationOfBooks(string _title, string _author, string _description, string _publisher)
        {

            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("http://localhost:57752");
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = client.GetAsync("api/Book/GetBooks").Result;

休息还不重要。实际上此时,在调试模式下,我希望在与 Web 应用程序相同的解决方案中切换 WebApi 项目,GetBooks 方法我在此方法的第一行有断点。这是结果的内容:

StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:

我的网络 abi 项目:

public ActionResult GetBooks(string _title, string _author, string _description, string _publisher)
        {
            var draw = 1;
...

webapi 配置:

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/Book/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Formatters.Remove(config.Formatters.XmlFormatter);
            config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
        }
    }

我怎样才能得到这个 web api 请求?

我运行 api 项目并尝试使用以下方法访问方法:

【问题讨论】:

标签: c# asp.net-web-api


【解决方案1】:

像这样更改您的 WebApiConfig-

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

    config.Routes.MapHttpRoute(
        name: "BooksApi",
        routeTemplate: "api/{controller}/{email}/{firstname}/{lastname}/{source}"
    );

然后像这样从 PaginationOfBooks 调用-

HttpResponseMessage response = client.GetAsync("api/Book/GetBooks/" + _title + "/" + _author + "/" + _description + "/" + _publisher).Result;

看看这是否有帮助。

【讨论】:

    【解决方案2】:

    在api方法前添加路由属性

    [Route("api/Book/GetBooks/{_title}/{_author}/{_description}/{_publisher}")]
    public ActionResult GetBooks(string _title, string _author, string _description, string _publisher)
            {
                var draw = 1;
    ...
    

    然后称它为

    public ActionResult PaginationOfBooks(string _title, string _author, string _description, string _publisher)
            {
    
                HttpClient client = new HttpClient();
                client.BaseAddress = new Uri("http://localhost:57752");
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    
                HttpResponseMessage response = client.GetAsync("api/Book/GetBooks/" + _title + "/" + _author + "/" + _description + "/" + _publisher).Result;
    

    【讨论】:

    • 它是 GET 不是 POST,你用 get 所以我显示 get
    • 是的,我可以使用“localhost:57752/api/Book/GetBooks/title...”从浏览器访问 api 方法,但我需要在应用程序中访问它
    • 我已经向您展示了如何使用 HttpResponseMessage response = client.GetAsync("api/Book/GetBooks/" + _title + "/" + _author + "/" + _description + "/" + _publisher).Result; 访问它,您需要更多详细信息吗?
    • 不,我现在可以正常工作了:) 但是我如何在调试中进入 web api 方法,我只需在“client.GetAsync(..)”方法中按 f11 并期望在api方法中切换断点..调试api应该怎么做?
    • 因为它的异步方法所以你必须等待它然后你可以在它上面设置一个断点,尝试应用异步等待方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多