2011-05-16 2 views
2

2 개의 문자열이 필요한 작업이 있습니다. 문자열 중 하나는 크고 추한 json 문자열입니다. 400 개의 잘못된 요청을 계속해서 남기므로이 동작을 통해 특수 문자가 전달되는 것을 허용하지 않을 것으로 생각됩니다.ASP.net MVC - 동작이 JSON 문자열 400 불량 요청을 좋아하지 않습니다.

작업에 직렬화 된 json 개체를 전달할 수 있습니까?

public ActionResult SaveState(string file, string state) 
    { 
     string filePath = GetDpFilePath(file); 
     HtmlDocument htmlDocument = new HtmlDocument(); 
     htmlDocument.Load(filePath); 
     HtmlNode stateScriptNode = 
      htmlDocument.DocumentNode.SelectSingleNode("/html/head/script[@id ='applicationState']"); 
     stateScriptNode.InnerHtml = "var applicationStateJSON =" + state; 
     htmlDocument.Save(filePath); 

     return null; 


    } 

ClientScript

'e' is a large json string 

$.post('/State/SaveState/' + fileName+'/' + '/' + e + '/'); 

강력한 텍스트

지금 UriEncoding를 사용하여 텍스트()를 인코딩하고 있지만 차이가 없습니다. 나는 MVC 액션이 기본적으로 이러한 특수 문자를 보낼 수 있다고 생각하지 않는다. 사실인가? 이 문제를 어떻게 해결합니까?

$ .post ('/ 상태/저장 상태 /'+ encodeURIComponent (파일 이름) + '/'+ '/'+ encodeURIComponent (e) + '/');

샘플 요청 :

요청 URL : HTTP : // 로컬 호스트 : 51825/주/SaveState/aa6282.html // % 7B % 22uid % 22 % 3A의 %의 22testUser %의 22 % 2C %의 22A

답변

0

URL에 URL을 추가하기 전에 e을 HTML 인코딩해야 할 수도 있습니다. 또한 추가 /이 필요하지 않습니다. 요청이 이루어질 때

2

당신은 그것을 인코딩해야합니다

$.post('/State/SaveState/' + encodeURIComponent(fileName) + '/' + encodeURIComponent(e)); 
+0

이것은 차이가없는 것처럼 보입니다. 변경 사항을 반영하여 질문을 업데이트했습니다. – Nick

+0

죄송합니다 ... 여분의 슬래시 ... 나는 그들을 제거했습니다. –

1

예, 직렬화 된 JSON 객체는 액션 메서드에 전달 될 수있다. MVC3은 내장 된 JSON 바인딩을 사용하여이 작업을 훨씬 쉽게 해줍니다. json2 라이브러리를 사용하여 객체를 직렬화합니다. 자세한 내용은이 게시물을 참조하십시오. 정말 훌륭하게 작동합니다.

http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx

+0

감사합니다.이 솔루션을 사용하려면 JSON을 바인딩 할 수있는 DTO 개체를 만들어야합니다. 이 문자열을 문자열로 처리하기 때문에 이것은 추가 단계처럼 보입니다. 그럴 필요가있다. – Nick

+0

네, 맞습니다. JSON 문자열의 모습을 보여줄 수 있습니까? 오브젝트 서버 측 없이도이 작업을 수행 할 수 있습니다. – BZink

1

나는 단절 내가 보내고 문자열의 크기로이 데이터를 보내니까이 크다. 게시물 본문에 데이터를 보내야합니다.

쿼리 문자열을 통해 보낼 수있는 데이터의 양에는 제한이있는 것처럼 보입니다. 이것이 오류 메시지의 출처라고 확신 할 수는 없지만 확실히 이해할 수 있습니다. 다음 게시물이 올바르게 작동하는 경우 :

$.post('/State/SaveState/', { file: fileName, state: e }); 
관련 문제