programing

복잡한 객체를 ASP에 전달하는 방법.jQuery ajax 호출에서 NET WebApi GET을 사용하시겠습니까?

oldcodes 2023. 3. 20. 23:34
반응형

복잡한 객체를 ASP에 전달하는 방법.jQuery ajax 호출에서 NET WebApi GET을 사용하시겠습니까?

JavaScript에 필터 옵션이 포함된 다음과 같은 복잡한 개체가 있습니다.

var filter={caseIdentifiter:'GFT1',userID:'2'};

ASP에 전달하고 싶습니다.NET MVC4 WebApi 컨트롤러 GET

[HttpGet]
public IEnumerable<JHS.Repository.ViewModels.CaseList> Get([FromBody]Repository.InputModels.CaseListFilter filter)
{
  try
  {
    return Case.List(filter);
  }
  catch (Exception exc)
  {
    //Handle exception here...
    return null;
  }
}

jQuery ajax 호출 사용

var request = $.ajax({
  url: http://mydomain.com/case,
  type: 'GET',
  data: JSON.stringify(filter),
  contentType: 'application/json; charset=utf-8',
  cache: false,
  dataType: 'json'
});

ASP의 "filter" 객체.NET 컨트롤러 메서드는 "null"입니다.POST로 변경하면 필터 오브젝트가 올바르게 전달됩니다.복잡한 객체를 GET에 전달하는 방법이 있습니까?

URL의 파라미터는 다수의 파라미터로 인해 비효율적이며 옵션 파라미터가 존재하기 어렵고 새로운 파라미터가 추가되어도 메서드의 시그니처는 일정하게 유지되기 때문에 구분하고 싶지 않습니다.

이 StackOverflow 질문/답변 후

ApiController 매개 변수에서 복합 유형이 null을 가져오는 중입니다.

GET에는 본문이 없기 때문에 컨트롤러 메서드의 [FromBody]속성은 [FromUri]여야 합니다.이 변경 후 "filter" 복합 객체가 올바르게 전달됩니다.

쿼리 문자열에 json 데이터를 추가하고 나중에 웹 API 측에서 구문 분석하는 경우.복잡한 오브젝트를 해석할 수 있습니다.post json 오브젝트 스타일보다 편리합니다.이게 제 해결책입니다.

//javascript file 
var data = { UserID: "10", UserName: "Long", AppInstanceID: "100", ProcessGUID: "BF1CC2EB-D9BD-45FD-BF87-939DD8FF9071" };
var request = JSON.stringify(data);
request = encodeURIComponent(request);

doAjaxGet("/ProductWebApi/api/Workflow/StartProcess?data=", request, function (result) {
    window.console.log(result);
});

//webapi file:
[HttpGet]
public ResponseResult StartProcess()
{
    dynamic queryJson = ParseHttpGetJson(Request.RequestUri.Query);
        int appInstanceID = int.Parse(queryJson.AppInstanceID.Value);
    Guid processGUID = Guid.Parse(queryJson.ProcessGUID.Value);
    int userID = int.Parse(queryJson.UserID.Value);
    string userName = queryJson.UserName.Value;
}

//utility function:
public static dynamic ParseHttpGetJson(string query)
{
    if (!string.IsNullOrEmpty(query))
    {
        try
        {
            var json = query.Substring(7, query.Length - 7); //seperate ?data= characters
            json = System.Web.HttpUtility.UrlDecode(json);
            dynamic queryJson = JsonConvert.DeserializeObject<dynamic>(json);

            return queryJson;
        }
        catch (System.Exception e)
        {
            throw new ApplicationException("can't deserialize object as wrong string content!", e);
        }
    }
    else
    {
        return null;
    }
}

언급URL : https://stackoverflow.com/questions/15814160/how-to-pass-complex-object-to-asp-net-webapi-get-from-jquery-ajax-call

반응형