Web API로 익명 형식 반환
MVC를 사용할 때 adhoc Json을 반환하는 것은 쉽습니다.
return Json(new { Message = "Hello"});
새로운 웹 API로이 기능을 찾고 있습니다.
public HttpResponseMessage<object> Test()
{
return new HttpResponseMessage<object>(new { Message = "Hello" }, HttpStatusCode.OK);
}
DataContractJsonSerializer
익명 유형을 처리 할 수 없으므로 예외가 발생 합니다.
나는이 이것을 대체했다 JsonNetFormatter 에 따라 Json.Net . 내가 사용하면 작동합니다.
public object Test()
{
return new { Message = "Hello" };
}
그러나 반환하지 않으면 Web API를 사용하는 요점이 보이지 않습니다 HttpResponseMessage
. 바닐라 MVC를 고수하는 것이 좋습니다. 내가 시도하고 사용한다면 :
public HttpResponseMessage<object> Test()
{
return new HttpResponseMessage<object>(new { Message = "Hello" }, HttpStatusCode.OK);
}
전체 HttpResponseMessage
.
누구든지 내에서 익명 형식을 반환 할 수있는 솔루션으로 나를 안내 할 수 있습니까 HttpResponseMessage
?
이것은 베타 릴리스에서 작동하지 않지만 최신 비트 ( http://aspnetwebstack.codeplex.com 에서 빌드 됨 )에서 작동하므로 RC를위한 방법이 될 것입니다. 넌 할 수있어
public HttpResponseMessage Get()
{
return this.Request.CreateResponse(
HttpStatusCode.OK,
new { Message = "Hello", Value = 123 });
}
이 답변은 조금 늦어 질 수 있지만 오늘 WebApi 2
은 이미 나와 있으므로 원하는 작업을 수행하는 것이 더 쉽습니다. 다음을 수행하면됩니다.
public object Message()
{
return new { Message = "hello" };
}
파이프 라인을 따라, 그것은에 연재됩니다 xml
또는 json
클라이언트의 환경 설정합니다 (에 따라 Accept
헤더). 이것이이 질문에 걸려 넘어지는 사람에게 도움이되기를 바랍니다.
이를 위해 JsonObject를 사용할 수 있습니다.
dynamic json = new JsonObject();
json.Message = "Hello";
json.Value = 123;
return new HttpResponseMessage<JsonObject>(json);
ExandoObject를 사용할 수 있습니다 . (추가 using System.Dynamic;
)
[Route("api/message")]
[HttpGet]
public object Message()
{
dynamic expando = new ExpandoObject();
expando.message = "Hello";
expando.message2 = "World";
return expando;
}
웹 API 2에서는 HttpResponseMessage를 대체하는 새로운 IHttpActionResult를 사용한 다음 간단한 Json 객체를 반환 할 수 있습니다. (MVC와 비슷 함)
public IHttpActionResult GetJson()
{
return Json(new { Message = "Hello"});
}
다음을 시도해 볼 수도 있습니다.
var request = new HttpRequestMessage(HttpMethod.Post, "http://leojh.com");
var requestModel = new {User = "User", Password = "Password"};
request.Content = new ObjectContent(typeof(object), requestModel, new JsonMediaTypeFormatter());
You should be able to get this to work if you use generics, as it will give you a "type" for your anonymous type. You can then bind the serializer to that.
public HttpResponseMessage<T> MakeResponse(T object, HttpStatusCode code)
{
return new HttpResponseMessage<T>(object, code);
}
If there are no DataContract
or DataMebmer
attributes on your class, it will fall back on serializing all public properties, which should do exactly what you're looking for.
(I won't have a chance to test this until later today, let me know if something doesn't work.)
In ASP.NET Web API 2.1 you can do it in a simpler way:
public dynamic Get(int id)
{
return new
{
Id = id,
Name = "X"
};
}
You can read more about this on https://www.strathweb.com/2014/02/dynamic-action-return-web-api-2-1/
You can encapsulate dynamic object in returning object like
public class GenericResponse : BaseResponse
{
public dynamic Data { get; set; }
}
and then in WebAPI; do something like:
[Route("api/MethodReturingDynamicData")]
[HttpPost]
public HttpResponseMessage MethodReturingDynamicData(RequestDTO request)
{
HttpResponseMessage response;
try
{
GenericResponse result = new GenericResponse();
dynamic data = new ExpandoObject();
data.Name = "Subodh";
result.Data = data;// OR assign any dynamic data here;//
response = Request.CreateResponse<dynamic>(HttpStatusCode.OK, result);
}
catch (Exception ex)
{
ApplicationLogger.LogCompleteException(ex, "GetAllListMetadataForApp", "Post");
HttpError myCustomError = new HttpError(ex.Message) { { "IsSuccess", false } };
return Request.CreateErrorResponse(HttpStatusCode.OK, myCustomError);
}
return response;
}
참고URL : https://stackoverflow.com/questions/10123371/returning-anonymous-types-with-web-api
'Programing' 카테고리의 다른 글
SQLiteDatabase에 싱글 톤 디자인 패턴 사용 (0) | 2020.10.30 |
---|---|
bash 탭 완성이 vim 탭 완성처럼 작동하고 일치하는 일치 항목을 순환하도록하려면 어떻게해야합니까? (0) | 2020.10.30 |
복사 중에 SCP가 심볼릭 링크를 무시하도록 할 수 있습니까? (0) | 2020.10.30 |
Ansible로 .bashrc를 소싱 할 수 없음 (0) | 2020.10.30 |
Cocoa Auto Layout을 사용하여 창에서 사용자 정의보기 크기를 조정하는 방법은 무엇입니까? (0) | 2020.10.29 |