簡體   English   中英

無法從ASP.NET Web API獲得響應

[英]Can't get response from ASP.NET web API

我正在設置一個ASP.net Web API,但是我一直從所有Http路由中獲取404。

它運行在http:// localhost:52011 /上,因為這是VS2013使用的默認位置。 我添加了一個簡單的測試HttpRoute,如果使用GET調用它來測試連通性,它只會返回一個字符串。

已啟用目錄瀏覽,以反饋Web API實際上位於localhost上,並且項目的所有目錄均可見。

我嘗試設置在WebApiConfig.cs的路由中固定的控制器名稱,並閱讀了很多有關HttpRoute映射的信息,但是我一直收到404或“找不到與名為controllername的控制器匹配的類型”。

我正在使用Postman進行測試,因為這是推薦的且易於使用。

歡迎任何提示!

WebApiConfig.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace BadgePrinter
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {            
            config.MapHttpAttributeRoutes();
            //route to print badge.
            config.Routes.MapHttpRoute(
                name: "apiPrint",
                routeTemplate: "api/{controller}/{action}/{Bedrijf}/{Aanspreektitel}/{Voornaam}/{Achternaam}/{Jobtitle}/{Kopies}/{Rijksregisternummer}/{BadgeAfdruk}/{printer}/{Image}",
                defaults: new { Image = RouteParameter.Optional}
            );
            //test route to get string back
            config.Routes.MapHttpRoute(
                name: "apiTest",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

BadgeController.cs(項目中唯一的控制器)

第一種方法是我最終必須使用的方法,但是測試方法是我用於測試的方法。

using BadgePrinter.CardTemplates;
using BadgePrinter.Interfaces;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;

namespace BadgePrinter.Controllers
{
    public class BadgeController : ApiController
    {     
        //removed the first method since it was big and distracting.
        // test method
        [HttpGet]
        public IHttpActionResult GetAllProducts()
        {
            return Ok("some product");
        }
    }
}

我正在使用的測試方法的鏈接: http:// localhost:52011 / api / BadgeController / Products / 1

我也嘗試了此鏈接,即使那沒關系: http:// localhost:52011 / api / BadgeController / Products / 1

結果:

{
    "Message": "No HTTP resource was found that matches the request URI 'http://localhost:52011/api/BadgeController/Products/1'.",
    "MessageDetail": "No type was found that matches the controller named 'BadgeController.cs'."
}

對於其他的HttpRoute,我一直得到404,但是如果我可以進行測試,我將無處可去:) PS:我對這種事情(ASP.net和API)是陌生的,所以我很抱歉如果我是個白痴。

您在這里有2個問題:

1)您的控制器名稱BadgeController但在您的API中,它應僅為Badge 正確的URL應該是:

http://localhost:52011/api/Badge/xxx

2)在您的代碼中看不到方法名稱Products或類似名稱。

3)如果是POST方法,則參數輸入中必須具有[FromBody]

您的網址存在一些問題:

http://localhost:52011/api/BadgeController/Products/1 

據我所知,您沒有任何GET方法可以映射到ID參數。 您的控制器中只有

[HttpGet]
public IHttpActionResult GetAllProducts()

不接受任何輸入。

2)記錄在案的Web API約定是您沒有在URL中明確編寫“ Controller”。 在這種情況下,僅需要控制器唯一的第一部分( Badge )。

3)我看不到您從哪里獲得URL的“產品”部分。 沒有自定義的路線定義或屬性會成為路線的一部分。 再次約定是,您定義一個動作方法,該動作方法的名稱以“ Get”開頭,並且將映射到控制器名稱的GET請求,並且末尾沒有其他內容。 該方法的其余名稱無關緊要-在您的情況下, AllProducts始終與/Products不匹配...因此,即使有必要,它仍然是不正確的。

總之,訪問您的GET操作的正確URL應為:

http://localhost:52011/api/Badge/

注意:如果要更改現有的GetAllProducts方法,或添加類似以下的第二種方法:

[HttpGet]
public IHttpActionResult Get(int id)
{
  return Ok("Product" + id);
}

然后,您可以在URL中使用ID,例如

http://localhost:52011/api/Badge/1

它應該路由到此方法。

嘗試刪除網址的控制器部分:

http:// localhost:52011 / api / Badge / Products / 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM