반응형

외부에서 사용할 API를 ASP.NET WebAPI로 구현을 했지만

자꾸 포맷이 이상하게 들어온다고 한다.

음 XML 포맷에 맞춰서 스트링으로 반환을 하고 있는데 뭐가 문제인지 알 수가 없었다.

 

Postman을 통해서 테스트를 하면서 응답 헤더 값을 확인 해보니 

Content-Type이 "application/json"으로 되어있었다.

 

혹시 해서 찾아보니 역시였다.

 

Content-Type을 "application/xml"로 맞춰서 아래 코드 형식대로 수정하니

정상적으로 파싱이 된다고 한다. ^_________________________^

 

너무 나태해졌으ㅋㅋㅋ

 

 

[HttpGet]

public HttpResponseMessage GetXml ()

{

string xmlString = "<? xml version='1.0' encoding='UTF-8'?><msg>TEST</msg>");

 

return new HttpResponseMessage() { Content = new StringContent(xmlString, Encoding.UTF8, "application/xml") };

 

}

반응형
반응형

 

ASP.NET Web API GET요청시 JSON 포맷으로 무조건 리턴 받게 하는 방식이다.

JsonMediaTypeFormatter를 이용해서 Employee 객체를 무조건 JSON으로 직렬화시켜서

응답으로 내보내게 된다.

 

public HttpResponseMessage Get(int id)
{
    var employee = list.FirstOrDefault(e => e.Id == id);
    return new HttpResponseMessage()
    {
        Content = new ObjectContent<Employee>(employee,
        Configuration.Formatters.JsonFormatter)
    };
}

반응형
반응형

IIS에서 웹 사이트를 새로 생성하고 파일 경로를 설정한 이후 부터 설명 하겠다.

자꾸 잊어버리네멍2


1. ASP.NET 4 사용 설정

.NET Framework 4를 설치하면, IIS의 Web Service Extensions 4가 등록 되어있지만 기본 값이 "금지(Prohibited")로 설정되어있다.


ASP.NET v4.0.30319 라인에서 우클릭을 하고 "허용(Allowed)"를 선택한다. 


2. 와일드카드 맵 추가

Web-Forms 어플리케이션을 구성한 다음에는 어플리케이션이 실행이 될 것이다.  하지만 MVC 어플리케이션으로 개발을 하였다면 마지막 한가지 단계가 더 해야한다. 추가한 어플리케이션을 위한 와일드카드 맵(Wildcard map)을 추가할 필요가 있다.

IIS로 돌아가서 웹 사이트에서 우클릭을 한 후 "속성" -> "홈 디렉토리" -> "구성" 을 선택한다.

아래 부분에 와일드카드 응용 프로그램 매핑(Wildcard Application maps) 설치된 리스트를 볼 수 있다. 그런데 비어 있을 것이다. 여기서 "삽입(Insert)" 버튼을 클릭한다.

응용 프로그램 확장 매핑 추가 / 편집 대화창이 나타난다. 실행파일(Excutable) 텍스트 입력 필드에 ".NET Framework 4.0 isapi-extension" 보통 c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 경로를 입력한다. 그리고 파일이 있는지 확인("Verify that file exist") 체크 박스의 체크를 해제한다.

확인("OK") 버튼을 클릭하면 대화창이 닫힌다.

이제 MVC4 어플리케이션을 실행에 대한 설정은 모두 준비 되었다.


참조 블로그 : http://sde03.azurewebsites.net/?p=3101


반응형
반응형

이전에 한번 클라이언트에서 서버로 파일을 업로드하고 이것을 외부 FTP 서버로 전송하는 글을 쓴적이 있다.

여기서 한가지 문제점이 있었다.담배2

 

private bool UploadToFTP(HttpPostedFile fileToUpload)

{

      try

{
  

string uploadUrl = @ftp://블라블라블;

string uploadFileName = fileToUpload.FileName;

................

      }

}

이런식으로 HttpPostedFile 파라미터를 이용 해서 클라이언트의 input file 태그에서 선택된 파일을 받아올 수 있다고

설명을 했다.

하지만 다중 File Upload일 경우 하나라도 파일을 선택을 하지 않을시 fileToUpload의 파라미터값이

null로 들어오는 문제점이 있었다.

 

이것을 해결 하기 위한 방법은 메소드 내부에 Request.Files를 사용하면 된다.

클라이언트에서 업로드한 파일의 컬렉션을 multipart MIME 형식으로 가져오게 되며,

모든 input file 태그에서 파일을 선택하지 않아도 잘 동작한다.

private bool UploadToFTP()

{

      try

{
  

HttpFileCollectionBase files = Request.Files;

foreach (string file in files)

{

HttpPostedFileBase f = files[file] as HttpPostedFileBase;

................

}

      }

}

 

여기서 이 두가지의 차이를 명심해야 한다.

첫번째 HttpPostedFileBase를 파라미터를 받을 경우

Client에서 Input file의 name이 모두 같아야 한다~ 이것에 서버 메소드의 Parameter 이름이 된다.!!

두번째 Request.Files를 이용할 경우

Client에서 Input file의 name이 같으면 안된.!!

 

 

반응형
반응형

Visual Studio 2012에서 ASP.NET MVC4 프로젝트를 생성하는 도중에 아래와 같은 오류가 발생할 때가 있다.

"Error: this template attempted to load component assembly 'NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.".

이 현상은 Visual Studio 2012에서 Nuget 설치가 되어있지 않아서다.

해결 방법은 아래와 같은 순서로 진행하면 된다.

1. Visual Studio 2012를 실행 -> Tolls -> Extension & Updates

2. Online을 선택한다.

3. NuGetPackage Manager를 선택해서 Download를 클릭하면 Nuget Package가 설치된다.

 

 

설치가 되면 Visual Studio2012를 재시작한 후 프로젝트를 생성하면 오류 없이 정상적으로 동작하는 것을

확인할 수 있다.

 

반응형
반응형

요렇게 하면 된다ㅎㅎ

1) Ensured .net 4.5 is installed.
2) Added <modules runAllManagedModulesForAllRequests="true"/> to my web.config
3) Ran %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir in cmd
4) Checked that my app pool was set to Integrated Mode
5) Checked that it's set to use .net 4

 

 web.config에 아래 코드 추가

<system.webServer>
   
<modules runAllManagedModulesForAllRequests="true" />
    ...
</system.webServer>

반응형
반응형

ASP.NET MVC 1.0, 2.0 응용 프로그램의 샘플 프로젝트에서 AccountController 내의 Return Url 처리시

Return Url을 변조 가능성을 잠재하고 있다.

이러한 문제를 해결하기 위해서 아래의 코드를 통해서 Return Url을 체크를 꼭 해야한다.

MVC 3.0 이상부터는 UrlHelper 클래스안에 IsLocalUrl 이라는 메소드가 정의가 되어있으며, 샘플 코드에도 자동으로

적용이 되어있다.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Routing;

namespace OpenRedirectionAttack.Code
{
    public class UrlHelperExtension
    {
        public bool IsLocalUrl(string url)
        {
            if (string.IsNullOrEmpty(url))
            {
                return false;
            }

            Uri absoluteUri;
            if (Uri.TryCreate(url, UriKind.Absolute, out absoluteUri))
            {
                return String.Equals(HttpContext.Current.Request.Url.Host, absoluteUri.Host, StringComparison.OrdinalIgnoreCase);
            }
            else
            {
                bool isLocal = !url.StartsWith("http:", StringComparison.OrdinalIgnoreCase) && !url.StartsWith("https://", StringComparison.OrdinalIgnoreCase) && Uri.IsWellFormedUriString(url, UriKind.Relative);
                return isLocal;
            }
        }
    }
}

반응형
반응형

XP IIS 5 에서 발생되는 에러 입니다.

 

VS2008 에서는 잘 되는데, 웹사이트로 publishing 후 위와 같은 에러가 발생한다면...

그것은 소스상의 문제가 아니고 권한 문제인다.

 

Exception 정보에서

Failed to update database "C:\INETPUB\MVCWEBSITE\APP_DATA\NERDDINNER.MDF" because the database is read-only.

메시지가 나오면, 100% 입니다.^^;;

 

리스트나 뷰에서는 에러가 안나는데, edit, create, delete 시 에러가 발생 합니다.

쓰기 권한이 없기 때문에...

 

쓰기권한을 주면 모든게 해결이 됩니다.

Inetpub/xxx/App_Data 폴더 속성 >> 보안탭

*** 보안탭이 안보이는 경우,

1. ftp://ftp.microsoft.com/bussys/winnt/winnt-public/tools/scm/scesp4i.exe 다운

2. 실행시 압축 해제 폴더 지정하고 OK

3. 압축 해제 폴더에서 setup.inf 오른쪽 마우스 클릭 >> 설치

4. 파일바꾸기 >> 아니오

5. 재시작 >> 아니오

 

다시 App_Data 폴더 속성 으로 가면 보안탭이  보입니다.

보안탭에서 ASP.NET Machine Account 가 추가 되어 있는지 확인하고, 없으면 (없으니까 하는거임)

추가 >> 고급 >> 지금찾기 >> ASPNET 을 추가하시고

사용권한에서 Write를 허용해주시면 됩니다...

 

어플케이션을 다시 시작해 보세요~^^;;



반응형

+ Recent posts