code

여러 매개 변수를 ASP에 전달하려면 어떻게 해야 합니까?Net Web API GET?

starcafe 2023. 4. 28. 21:12
반응형

여러 매개 변수를 ASP에 전달하려면 어떻게 해야 합니까?Net Web API GET?

를 사용하고 있습니다.RESTful api를 (바라건대) 구현하기 위한 NetMVC4 웹 API.시스템에 몇 가지 매개 변수를 전달하고 작업을 수행하도록 한 다음 결과로 개체 목록을 반환해야 합니다.구체적으로 저는 두 개의 날짜를 전달하고 그 사이에 해당하는 기록을 반환합니다.또한 이후의 통화가 시스템에서 재처리되지 않도록 반환된 기록을 추적하고 있습니다.

몇 가지 접근법을 고려했습니다.

  1. 파라미터를 하나의 JSON 문자열로 직렬화하고 API에서 분리합니다.http://forums.asp.net/t/1807316.aspx/1

  2. 쿼리 문자열에 매개 변수를 전달합니다.
    여러 쿼리 매개 변수를 restful api에 전달하는 가장 좋은 방법은 무엇입니까?

  3. 경로에서 매개 변수 정의: api/controller/date1/date2

  4. 기본적으로 매개 변수가 있는 개체를 전달할 수 있는 POST를 사용합니다.

  5. 웹 API(현재)가 지원하므로 ODATA를 연구합니다.저는 아직 이것을 많이 해본 적이 없어서 잘 모릅니다.

적절한 REST 방법은 데이터를 가져올 때 GET를 사용해야 한다는 것을 나타내는 것 같습니다.그러나 GET도 nulloptional이어야 하는데(부작용이 발생하지 않음), 저는 API 시스템에서 기록을 표시하기 때문에 저의 구체적인 구현이 그것을 위반하는 것인지 궁금합니다.

그것은 또한 변수 매개변수를 지원하는 질문으로 저를 이끌었습니다.입력 매개 변수 목록이 변경되는 경우, 자주 변경되는 경우 선택 3에 대한 경로를 다시 정의해야 하는 것은 지루할 것입니다.런타임에 매개 변수가 정의되면 어떻게 될까요?

어떤 경우에, 특정 구현을 위해 어떤 선택이 최선인 것 같습니까?

가장 쉬운 방법은 간단하게 사용하는 것이라고 생각합니다.AttributeRouting.

컨트롤러 내에서 이 기능을 글로벌에 적용하려는 이유는 분명합니다.WebApiConfig 파일?

예:

    [Route("api/YOURCONTROLLER/{paramOne}/{paramTwo}")]
    public string Get(int paramOne, int paramTwo)
    {
        return "The [Route] with multiple params worked";
    }

{}이름이 매개 변수와 일치해야 합니다.

그렇게 간단하지만, 이제 당신은 별도로GET이 인스턴스에서 여러 개의 매개 변수를 처리합니다.

로▁the에 새로운 .WebApiConfig출품작

예를 들어, 다음을 호출합니다.

public IEnumerable<SampleObject> Get(int pageNumber, int pageSize) { ..

추가:

config.Routes.MapHttpRoute(
    name: "GetPagedData",
    routeTemplate: "api/{controller}/{pageNumber}/{pageSize}"
);

그런 다음 HTTP 호출에 매개 변수를 추가합니다.

GET //<service address>/Api/Data/2/10 

매개 변수를 전달해야 하는 RESTfull api를 구현해야 했습니다.Mark의 첫 번째 예 "api/controller?start=date1&end=date2"에서 설명한 것과 동일한 스타일로 쿼리 문자열에 매개 변수를 전달하여 이 작업을 수행했습니다.

컨트롤러에서 C#으로 분할된 URL의 팁을 사용했습니다.

// uri: /api/courses
public IEnumerable<Course> Get()
{
    NameValueCollection nvc = HttpUtility.ParseQueryString(Request.RequestUri.Query);
    var system = nvc["System"];
    // BL comes here
    return _courses;
}

저의 경우 다음과 같이 Ajax를 통해 WebApi를 호출했습니다.

$.ajax({
        url: '/api/DbMetaData',
        type: 'GET',
        data: { system : 'My System',
                searchString: '123' },
        dataType: 'json',
        success: function (data) {
                  $.each(data, function (index, v) {
                  alert(index + ': ' + v.name);
                  });
         },
         statusCode: {
                  404: function () {
                       alert('Failed');
                       }
        }
   });

이게 도움이 되길...

http://habrahabr.ru/post/164945/ 에서 우수한 솔루션을 찾았습니다.

public class ResourceQuery
{
   public string Param1 { get; set; }
   public int OptionalParam2 { get; set; }
}

public class SampleResourceController : ApiController
{
    public SampleResourceModel Get([FromUri] ResourceQuery query)
    {
        // action
    }
}

이 기록 표시는 무엇을 의미합니까?이 리소스에 대한 모든 쿼리를 기록하려는 경우 GET를 사용하고 모든 캐시를 사용하지 않도록 설정합니다.기록 표시에 다른 목적이 있다면 POST가 방법입니다.사용자는 자신의 행동이 시스템에 영향을 미치고 POST 방법이 경고임을 알아야 합니다.

GET 또는 POST 사용 @LukLed에 의해 명확하게 설명됩니다.매개 변수를 전달할 수 있는 방법과 관련하여 두 번째 접근법을 제안합니다(저도 ODATA에 대해 잘 모릅니다).

1.파라미터를 하나의 JSON 문자열로 직렬화하여 API에서 분리합니다.http://forums.asp.net/t/1807316.aspx/1

이것은 사용자 친화적이지 않고 SEO 친화적입니다.

2.쿼리 문자열에서 매개 변수를 전달합니다.여러 쿼리 매개 변수를 restful api에 전달하는 가장 좋은 방법은 무엇입니까?

이것이 일반적으로 선호되는 접근 방식입니다.

3.경로에서 매개변수 정의: api/controller/date1/date2

이것은 확실히 좋은 접근법이 아닙니다..date2는 의하리입다의 입니다.date1사실은 그렇지 않습니다. 다 둘다date1그리고.date2쿼리 매개 변수이며 동일한 수준으로 제공됩니다.

간단한 경우에, 저는 이와 같은 URI를 제안하고 싶습니다.

api/controller?start=date1&end=date2

하지만 저는 개인적으로 아래의 URI 패턴을 좋아하지만, 이 경우에는 파라미터를 매핑하기 위해 몇 가지 커스텀 코드를 작성해야 합니다.

api/controller/date1,date2

여기에 설명된 대로 매개 변수 바인딩을 사용합니다. http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

 [Route("api/controller/{one}/{two}")]
    public string Get(int One, int Two)
    {
        return "both params of the root link({one},{two}) and Get function parameters (one, two)  should be same ";
    }

루트 링크({one,{two})와 Get function 매개 변수(하나, 둘)의 두 매개 변수가 같아야 합니다.

이게 정말 오래된 일이라는 건 알지만, 최근에 같은 걸 원했고, 여기 제가 발견한 게...

    public HttpResponseMessage Get([FromUri] string var, [FromUri] string test) {
        var retStr = new HttpResponseMessage(HttpStatusCode.OK);
        if (var.ToLower() == "getnew" && test.ToLower() == "test") {
            retStr.Content = new StringContent("Found Test", System.Text.Encoding.UTF8, "text/plain");
        } else {
            retStr.Content = new StringContent("Couldn't Find that test", System.Text.Encoding.UTF8, "text/plain");
        }

        return retStr;
    }

그럼 이제 당신의 주소/URI/

http(s)//myURL/api/myController/?var=getnew&test=test

결과: "테스트 발견"


http(s)//myURL/api/myController/?var=getnew&test=hosts

결과: "해당 테스트를 찾을 수 없습니다."

이제 다음을 사용하여 이 작업을 수행할 수 있습니다.

        public string Get(int id, int abc)
        {
            return "value: " + id + "  " + abc;
        }

"값: 510"이 반환됩니다.

https://yourdomain/api/yourcontroller?id=5&message=10으로 호출하면 됩니다.

    public HttpResponseMessage Get(int id,string numb)
    {
        //this will differ according to your entity name
        using (MarketEntities entities = new MarketEntities())
        {
          var ent=  entities.Api_For_Test.FirstOrDefault(e => e.ID == id && e.IDNO.ToString()== numb);
            if (ent != null)
            {
                return Request.CreateResponse(HttpStatusCode.OK, ent);
            }
            else
            {
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Applicant with ID " + id.ToString() + " not found in the system");
            }
        }
    }

이 코드는 저에게 효과가 있습니다.그런 다음 url http://.../api/GetSomething?paramOne=1&paramTwo=2에서 일반 쿼리 문자열을 사용할 수 있습니다.

.NET 6 코어

[Route("api/GetSomething")]
public IActionResult GetSomething(int paramOne, int paramTwo)
{
    ...    
    return Content(jsonData);
}

다음을 수행하는 대신 [Route("api/GetSomething/{paramOne}/{paramTwo})"]

언급URL : https://stackoverflow.com/questions/10937524/how-should-i-pass-multiple-parameters-to-an-asp-net-web-api-get

반응형