웹 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);
}
실행 didnt한다. 돌아온 json 라인에 중단 점을 넣었습니까? 코드가 거기 도달합니까? –
예 코드가 도달했습니다. 로컬 호스트에서 완벽하게 작동합니다. –
_context.Apps에 대한 호출 전후에 작업에 로깅을 넣는 것이 좋습니다. 또한 API를 사용하여 간단한 문자열을 반환하려고 시도 했습니까? –