강사님 컴
서버 이름 : cn76.indisk.co.kr,3423
1. 새 프로젝트
2. 비어있음 > 웹 api 추가
3. 고급 > https에 대한 구성 꺼놓기 (보안 프로토콜)
4. controller > 새 컨트롤러 추가 > 읽기/쓰기 동작이 포함된 wep api 컨트롤러 > 추가 / 이름 : defaultController
5. 실행해보면 실행이 안되는 것을 알 수 있음
6. routetemplete : 사이트,,,? /api/컨트롤러이름/아이디이름
postman?
크롬에서 요청하면 기본적으로 XML로 보여주고
postman에서 요청하면 JSON으로 넘어옴!
get 방식
url?name=1&age=2 -> 쿼리스트링
단점 - 눈에 값들이 다 보임(암호화x) / 4,000개의 정보를 보낼때 제한이 있음! (1,000자 제한)
post 방식
- 데이터를 집어넣을 때
get방식을 극복 - Headers 사용
put
- 데이터를 업데이트
patch
- 데이터를 지울 때
참고 : 구글 - c# 웹 api 쳐서 학습하기
강사님 : (더 쉬운방법) 프로젝트를 2개 만들어서 데이터 레이어를 따로두기
> 새 프로젝트 > 클래스 라이브러리(.NET FRAMEWORK) > Chinook.Data > 프레임워크 4.7.2 > 만들기
> class1.cs 삭제 > 새 항목 추가 > ADO.NET 모델 / 이름 : chinook > 새연결 > sql server >
>> 하다보면 전에 생겼던 NUGET 문제가 생길텐데 전에 해결했던 방법대로 해결하시길~~~~
> 최종적으로 .Data, .Api 프레임워크 두개가 있어야함!
<connectionStrings> 복사 붙여넣기~!
원래프로젝트에는 app.config 있고 새로만든 프로젝트에는 web.config 있는데 거기에 복사 붙여넣기~~!
Ewig에 있던 entity 데이터 복사해서 붙여넣기하자
data 폴더 만들고 새로운 클래스 추가~! EntityData.cs (네임스페이스 조정)
몽땅 ChinookEntities 라고 바꾸기!!!!!
ArtistData 만들기 > EntityData 상속해주기 : EntityData<Artist>
꼭 프로젝트마다 포킹하기!!
// 에러 발생
엔티티 프레임워크를 다시 새로 깔아야함 - stackoverflow 게시물들이 믿을 만 함
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
// 진짜 에러
- ~~~ 직렬화 하지 못했습니다 -> sirialization
저장할때는 각 바이트별로 데이터가 쭉 펴져있어야하기때문에...... - 직렬화
-> 네트워크로 전송할때도 직렬화가 되어있어야함! (binary)
-> 받은 곳에서는 다시 역 직렬화를 해서 원래 객체로 만들어야함!
직렬화하는 방법
1. XML
2. JSON - 가장현실적임 (XML은 무거움) Javascript object Notation
- .NET에는 JSON을 할수있는게 없음 그래서 써드퍼티 라이브러리? 를 사용
-> 설치해주기
-> 설치하고나면
- string JsonConvert.SerializeObject(artist);
private const string Path = "d:\\al.txt";
static void Main(string[] args){
Serialize();
Deserialize();
}
private static void Deserialize()
{
string json = File.ReadAllText(Path);
Artist artist = JsonConvert.DeserializeObject<Artist>(json); // 직렬화된 문자열을 넘겨줌
Console.WriteLine($"{artist.ArtistId} / {artist.Name}");
}
private static void Serialize()
{
Artist artist = new Artist();
artist.AristId = 123;
artist.Name = "Thomas";
// 직렬화
string json = JsonConvert.SerializeObject(artist);
File.WriteAllText(path, json);
// 역직렬화
-> 사실 여기서는 Artist는 직렬화 할수 있는 그런 객체가 아니기 때문에
Artist 정의로 가서
[JsonObject]를 붙여주어야함!! (+ using문 추가)
> NUGET 솔루션 탐색기 > 추가 > DATA 추가
[JsonObject(MemberSerialization.OptIn)]
- OptIn (권장)
- OptOut (뺴고싶은거만 명시적으로 지정해서 빼기)
[JsonProperty] 어트리뷰트 붙여주어야함!
public int ArtistId() {get; set;}
* 크롬에서는 xml형식으로 받겠다고 요청했기때문에 에러가 뜸 postman에서는 json으로 호출하기 때문에 괜츈,,,('?)
* 바꿨던 정의는 템플릿이므로 수정해도 다시 덮어씌워지기 때문에 새로운 entities들만 담아놓는 폴더를 만들어서 추가해줌 (partial로 정의되어있기때문에 클래스가 2개여도 가능 한 것!)
바꿔주는 클래스에도 partial이라고 정의하기! (한 클래스가 두개파일에 나눠서 들어가있음 - C#에서만 아마 가능한 일)
* 프로퍼티는 중복정의로 에러가 나게됨,,,,,,,
그래서 닷넷은 메타정의를 갖고있는 클래스를 따로 정의할 수 있는 기능을 갖고 있음!...buddy class 만들기 가능
** 메타클레스 **
public class ArtistMeta
{
[JsonProperty]
public int ArtistId{ get; set; }
~~~~~
}
[MetadataType(typeof(ArtistMeta))] // 친구 메타 클래스
[JsonObject(MemberSerialization.OptIn)]
public partial class Artist
{
}
== 이로써 웹에서 값을줘도 insert가 들어가게됨..!!!1..1.1!!!!!!
(배포하기)
> 프로그램 및 기능 > 윈도우 켜기 끄기 > 인터넷 정보 서비스?
> 기본사이트 > 기본 설정 > 경로를 가보기 (이게 웹 서버의 루트)
> 우클릭 > 응용프로그램 추가 (가상의 사이트 만들기)
(배포방법)
ChinnokApi > 우클릭 > 게시 > 게시대상선택 > 폴더 > bin~~ (최조경로로하자) > 프로필만들기 > 게시
>> 이부분은 iis에서 접근할 수 있게끔 응용프로그램으로 만들어주어야함
>> 배포하기 방법 이어서~ > 응용프로그램추가 > 멸칭 ChinookApi > 실제경로 : 위의 경로 > 연동해주면 끗!
이제 postman으로 안치고 웹에서 쳐도 결과값이 나올 것임,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 근데 에러
why???!!!
http://192.168.200.182/ChinookApi/artist
consume web api from unity
unity 개발 시 REST API 호출 방법과 JSON LIBRARY 관련 링크정리
'Archive' 카테고리의 다른 글
[Proxy] Proxy Server란? (0) | 2020.07.01 |
---|---|
1002 서버프로그래밍 - 500.19 에러 (0) | 2019.10.02 |
0927 이제 진짜 EWIG 데이터 베이스를 써보자 05 (0) | 2019.09.27 |
0927 EWIG 부모클래스 04 (0) | 2019.09.27 |
0927 ORM 기술을 사용한 EWIG 03 (0) | 2019.09.27 |