2017-11-01 14 views
0

웹 Api가 로컬 호스트에서 제대로 작동하지만 프로덕션 서버에서 파일을 업로드하면 응용 프로그램이 정상적으로 작동하지만 API가 비어있게됩니다. 다음은 WebApiConfig.cs 수정 코드입니다.ASP.net MVC5 EF6 Api 프로덕션 서버에서 빈 문자열 반환

WebApiConfig.cs 
public static void Register(HttpConfiguration config) 
    { 
     var settings = config.Formatters.JsonFormatter.SerializerSettings; 
     settings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
     settings.Formatting = Formatting.Indented; 
     config.Formatters.JsonFormatter.SupportedMediaTypes 
      .Add(new MediaTypeHeaderValue("text/html")); 

     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 

여기는 API 컨트롤러 (AppsController.cs)이

[HttpGet] 
    [Route("api/{plat}/{lang}")] 
    public IHttpActionResult AppsByPlatformAndLanguage(string plat, string lang) 
    { 
     var apps = _context.Apps 
      .Include(p => p.AgeGroup) 
      .Include(p => p.ProductCode) 
      .Include(p => p.Language) 
      .Include(p => p.Platform) 
      .Where(p => p.Platform.ApiAccessName == plat && p.Language.ApiAccessName == lang) 
      .Select(p => new 
      { 
      p.Name, 
      languageName = p.Language.Name, 
      platformName = p.Platform.Name, 
      productCode = p.ProductCode.Name, 
      p.StoreId, 
      p.StoreURL, 
     }); 

     return Json(apps); 
    } 

I는 web.config 파일

<sessionState mode="Off"></sessionState> 
    <modules runAllManagedModulesForAllRequests="true"> 
    <handlers> 
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
    <remove name="OPTIONSVerbHandler" /> 
    <remove name="TRACEVerbHandler" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    <add name="Glimpse" path="glimpse.axd" verb="GET" type="Glimpse.AspNet.HttpHandler, Glimpse.AspNet" preCondition="integratedMode" /> 

    <remove name="ExtensionlessUrl-Integrated-4.0"/> 
    <remove name=" ExtensionlessUrl-ISAPI-4.0_32bit "/> 

</handlers> 

을 여러 수정을 시도하고 여기 RAW JSON 출력하다 I HttpRequester (API 테스트 용 Firefox 추가 기능)에서 가져 오기

-- response -- 
200 OK 
Content-Type: application/json; charset=utf-8 
Content-Length: 2 
Connection: keep-alive 
Keep-Alive: timeout=15 
Cache-Control: no-cache 
Pragma: no-cache 
Expires: -1 
Server: Microsoft-IIS/10.0 
X-AspNet-Version: 4.0.30319 
Set-Cookie: 

AspNet.ApplicationCookie=nyZeFxJOu6HOLGVXW4JS3s0B1wmOLBhd 
XTSAv9SyDYSXyTTnf7XFnEJ59hJ0kWPKr9Z8u18-rOnYmpwaQsGPnHH4LcsIqRsD 
AqK7lI8w1pcFdaGtm07y1WFVURGnzm88cFDKZIZwNriTYllo972jqbbA3asdfDFLJadsfYad 
fasdfas867asadfMCZ_q4BCrha82fLOpeP671R_QpUbbrwYE_xVLQgDRNW 
cIXY-f1aEQtbB7jOHu5n_jJnSOhP3P3Tnhr7kNWVnEEyzlM9GrT_eYxc1V8mm4pGrpUvinS 
QtKVRXDfUWsrexR4VLthul3IBcpRP5JgQxAAtPMp5soFgGAVa3D5IvVR6AGlzFgUTzy1 
wblvLWftbOfMuo4h1rws5Z5eUgDuZ7gAnLh8X7XErGHw8e6AxGitVNQGntqXtCDHCq 
TxQG03t5rhDpZeUST-IVPGZguz60qkR4jtlo1uyDUjtpMHNkFPJNWvAfQ51w 
5eaQKuHHZRIU1On9jGeFvq; 
path=/; expires=Wed, 15-Nov-2017 04:25:08 GMT; HttpOnly 
X-Powered-By: ASP.NET 
Date: Wed, 01 Nov 2017 04:25:07 GMT 

[] 
,

편집 JSON 응답의 로컬 호스트 버전은 다음 한 헤더

-- response -- 
    200 OK 
    Cache-Control: no-cache 
    Pragma: no-cache 
    Content-Length: 1015 
    Content-Type: application/json; charset=utf-8 
    Expires: -1 
    Server: Microsoft-IIS/10.0 
    X-AspNet-Version: 4.0.30319 
    X-SourceFiles: =?UTF-8?B?pcTmF2ZWVkXE1hcmtldGluZ1xNYXJrZXRpbmdcYXBpXGlvc1xlbg==?= 
    X-Powered-By: ASP.NET 
    Date: Wed, 01 Nov 2017 06:10:39 GMT 

내가 몇 가지를 생각한다.

1) Json Serializer 문제. 서버의 2) 유형 (대부분의 호스팅 서버가처럼 그것은의 cPanel에 모든 컨트롤을 제공하지 않습니다는. 그게 내가 생각하는 이유, 내가) 다른 서버에

편집을 점검 할 필요가있다

그러나 프로덕션 서버에서 샘플 문자열을 반환합니다.

[HttpGet] 
    [Route("api/sample")] 
    public IHttpActionResult Sample() 
    { 

     string xyz = "Something"; 
     return Ok(xyz); 
    } 
+0

실행 didnt한다. 돌아온 json 라인에 중단 점을 넣었습니까? 코드가 거기 도달합니까? –

+0

예 코드가 도달했습니다. 로컬 호스트에서 완벽하게 작동합니다. –

+1

_context.Apps에 대한 호출 전후에 작업에 로깅을 넣는 것이 좋습니다. 또한 API를 사용하여 간단한 문자열을 반환하려고 시도 했습니까? –

답변

0

많은 감사에 체인 .ToList()에 필요가 있다고 생각, 내 쿼리 것을 깨닫게되었다 내부 버그로 인해 비어있는 테이블에 의존했다.

쿼리는 어떤 이유로 저장되지 않은 ApiAccessName에 따라 다릅니다.

.Where(p => p.Platform.ApiAccessName == plat && p.Language.ApiAccessName == lang) 
0

나는 당신이 당신의 ALL 기타 사항 서보 -OFF() 올바른 방향으로 날을 가리키는위한 바박 Fakhriloo 및 Parv 샤르마에

+0

행운이 없습니다. ( –

0
[HttpGet] 
[Route("api/{plat}/{lang}")] 
public IHttpActionResult AppsByPlatformAndLanguage(string plat, string lang) 
{ 
    var apps = _context.Apps 
     .Include(p => p.AgeGroup) 
     .Include(p => p.ProductCode) 
     .Include(p => p.Language) 
     .Include(p => p.Platform) 
     .Where(p => p.Platform.ApiAccessName == plat && p.Language.ApiAccessName == lang) 
     .Select(p => new 
     { 
     p.Name, 
     languageName = p.Language.Name, 
     platformName = p.Platform.Name, 
     productCode = p.ProductCode.Name, 
     p.StoreId, 
     p.StoreURL, 
    }).ToList(); 

    return Json(apps); 
} 

것은 물론 널 (null)의 예를 추가, U 그렇지 않으면 오류가 대신 200 OK 것, 라우팅 확인 것 같다 쿼리, 환호