. .NET Core Web API 컨트롤러에서 HTTP 상태 코드를 사용하여 JSON을 반환하는 올바른 방법을 찾고 있습니다. 나는 이것을 다음과 같이 사용합니다 :
public IHttpActionResult GetResourceData()
{
return this.Content(HttpStatusCode.OK, new { response = "Hello"});
}
이것은 4.6 MVC 응용 프로그램에 있었지만 지금은 .NET Core 에서이
IHttpActionResult
가없는 것 같습니다.
나는
ActionResult
다음과 같이 사용하십시오 :
public ActionResult IsAuthenticated()
{
return Ok(Json("123"));
}
그러나 아래 이미지와 같이 서버의 응답이 이상합니다.
웹 API 컨트롤러가 웹 API 2에서와 같이 HTTP 상태 코드로 JSON을 반환하기를 원합니다.
- 답변 # 1
- 답변 # 2
가장 일반적인 상태 코드에 대해 미리 정의 된 방법이 있습니다.
Accept
Content-Type
를 반환 응답과 함께Accept
application/json
를 반환 + 새로운 리소스 URLForcing a Particular FormatIf you would like to restrict the response formats for a specific action you can, you can apply the [Produces] filter. The [Produces] filter specifies the response formats for a specific action (or controller). Like most Filters, this can be applied at the action, controller, or global scope.
[Produces("application/json")] public class AuthorsController
를 반환[Produces]
AuthorsController
를 반환 등와이즈 비즈 참조 그리고
그러나 당신이 정말로 주장한다면Accept
모든 방법의 목록.options.RespectBrowserAcceptHeader = true; // false by default
를 사용할 수 있습니다 사용자 정의 코드를 설정하려면 코드를 읽기 어렵게 만들고 헤더를 설정하기 위해 코드를 반복해야하므로 (Ok(result)
와 같이) ).200
- 답변 # 3
ASP.NET Core 2.0을 사용하면
CreatedAtRoute
에서 객체를 반환하는 이상적인 방법(MVC와 통합되고 동일한 기본 클래스201
를 사용합니다. )는NotFound
알림
<올>404
와 함께 반환 상태 코드 (BadRequest
입니다)400
의 유형 )콘텐츠 협상을 수행합니다. 즉,
BaseController.cs
를 기반으로 반환됩니다. 요청 헤더. 만약Controller.cs
요청으로 전송되면StatusCode
로 반환됩니다. . 아무것도 보내지 않으면CreatedAtRoute
기본값입니다.특정 상태 코드와 함께전송해야하는 경우
public ActionResult IsAuthenticated() { return StatusCode(200, Json("123")); }
를 사용하십시오. 또는Web API
대신에. 둘 다 동일한 작업을 수행하고 컨텐츠 협상을 지원합니다.Controller
특히JSON으로 돌아가려면몇 가지 방법이 있습니다
public IActionResult Get() { return new OkObjectResult(new Item { Id = 123, Name = "Hero" }); }
알림
<올>와이즈 비츠를 집행하다 서로 다른 두 가지 방법으로
콘텐츠 협상을 무시합니다.
첫 번째 방법은 특정 시리얼 라이저
200 OK
로 JSON을 시행합니다. .두 번째 방법은
Ok
를 사용하여 동일하게 수행 속성 (ObjectResult
) )Accept
와 함께공식 문서에서 자세히 알아보세요. 여기에서 필터에 대해 알아보십시오.
샘플에 사용되는 간단한 모델 클래스
Accept: application/xml
- 답변 # 4
내가 생각해 낸 가장 쉬운 방법은 :
XML
- 답변 # 5
이것이 가장 쉬운 해결책입니다 :
JSON
또는
ObjectResult
StatusCode
관련 자료
- c# - AspNet Core ActionFilter는 메시지와 함께 Http 상태 코드를 반환합니다
- c# - ASPNET CORE 컨트롤러의 Task 에서 반환 형식
- java - Post Request 반환 상태 코드 500 Spring Boot 백엔드에 대한 Angular 요청
- sql server - 임용 상태 별 연간 직원 수 반환
- c# - 인스턴스를 계속 실행하면서 API 호출에서 ASPNET으로 응답을 반환하는 방법이 있습니까?
- c# - aspnet core 30의 UseRouting (…) 델리게이트 핸들러에서 객체를 반환하는 방법은 무엇입니까?
- bootstrap modal - httppost aspnet mvc 후 partialview를 반환
- aspnetboilerplate - Application Service에서 다른 HTTP 상태 코드를 반환
- AngularJS - angularjs - 봄:쿼리 결과가 비어있을 때 상태 코드와 텍스트를 반환
- laravel - 스파 앱의 오류에 대한 리턴 상태 코드를위한 최상의 선택
- c# - aspnet MVC 컨트롤러 클래스가 Action Method와 Json을 모두 반환 할 수 있습니까?
- windows - Jenkins 콘솔 출력으로 Matlab의 종료 상태를 반환하는 방법은 무엇입니까?
- c# : 잘못된 속성 식별자 문자 :‘. json 문자열을 객체로 구문 분석 할 때 경로 '', 줄 1, 위치 1
- c# : 전체 속성이 아닌 개체 내용 직렬화
- c# : 현재 컨텍스트, ApiController, asp.net core, IEnumerable에 이름이 없습니다.
- c# : .Net Core 모든 하위 도메인과 모든 로컬 호스트 포트를 동시에 허용하도록 CORS 구성
- c# : System.InvalidOperationException : 체계가 이미 존재합니다 : [auhtorize]를 사용할 때 Identity.Application
- c# : ASP.NET 5-TypeLoadException-'Microsoft.JSInterop.WebAssembly 어셈블리에서'WebAssembly.JSInterop.JSCallInfo '유형을로드 할 수 없습니다.
- c# : program.cs의 기본 도메인에 하위 도메인 다시 쓰기
- c# : Newtonsoft를 사용하여 getter 만있는 추상 클래스 역 직렬화
- c# : 명명 된 튜플의 이름이 직렬화 된 JSON 응답에 표시되도록합니다.
- c# : .NET Core 2.1 Apple 푸시 알림
JsonResult
로 응답하는 가장 기본적인 버전 입니다 :자신의 응답 코드를 명시 적으로 처리 할 수 없기 때문에 문제가 해결되지 않습니다.
와이즈 비즈 와이즈 비즈 그런 다음예 :
위의 두 가지 예는 모두 Microsoft 설명서에서 제공하는 훌륭한 가이드 : 응답 데이터 형식 지정
에서 가져온 것입니다. <시간> 추가 물건내가 자주 접하는 문제는 VS의 "새 프로젝트"템플릿에서 기본 구성을 사용하는 대신 WebAPI를보다 세밀하게 제어하기를 원한다는 것입니다.
기본 몇 가지를 확인하십시오 ...
1 단계 : 서비스 구성상태 코드를 완전히 제어하면서 ASP.NET Core WebAPI가 JSON Serialized Object로 응답하도록하려면
와이즈 비즈 와이즈 비즈 다른 요청 유형에 대한 응답과 함께 JSON 용 입력/출력 포맷터가 자동으로 포함됩니다.StatusCodeResult
를 포함시켜야합니다. 당신의// GET: api/authors/search?namelike=foo [HttpGet("Search")] public IActionResult Search(string namelike) { var result = _authorRepository.GetByNameSubstring(namelike); if (!result.Any()) { return NotFound(namelike); } return Ok(result); }
에서 서비스AddMvc()
에서 일반적으로 발견되는 방법 .프로젝트에모든 권한이 필요하고 WebAPI가
ConfigureServices
를 포함한 다양한 요청 유형에 어떻게 작동하는지와 같은 서비스를 엄격하게 정의하려는 경우 표준 브라우저 요청과 같은 다른 요청 유형에 응답하지 않으면 다음 코드를 사용하여 수동으로 정의 할 수 있습니다.다른 직렬화 형식 (protobuf, thrift 등)에 응답하고 싶을 경우 사용자 지정 입력/출력 포맷터를 추가 할 수있는 방법도 포함되어 있습니다.
위의 코드 덩어리는 대부분
2 일차 내가 선호하는 방법은 WebAPI가 요청 된 형식으로 모든 요청에 응답하는 것입니다. 그러나 요청 된 형식을 수락하지 않으면대체를 기본 (예 : JSON)으로
먼저 옵션에 등록해야합니다 (앞서 언급 한대로 기본 동작을 다시 작업해야 함)
마지막으로 서비스 빌더에 정의 된 포맷터 목록의 순서를 다시 정렬하면 웹 호스트는 기본적으로 목록 맨 위에있는 포맷터 (예 : 위치 0)로 설정됩니다.
자세한 내용은이 .NET 웹 개발 및 도구 블로그 항목을 참조하십시오.