반응형

PostgreSQL 데이터베이스에서 ASP.NET Core MVC Identity를 사용하기위한 가이드

1. 기본 ASP.NET Core 웹 응용 프로그램 템플릿을 시작하십시오.

Visual Studio 2017을 사용하여 ASP.NET MVC Core 웹 응용 프로그램 프로젝트를 만듭니다. "개별 사용자 계정"을 사용하도록 인증을 변경하십시오. 다음으로이 기본 애플리케이션을 편집하여 PostgreSQL 데이터베이스를 사용합니다.

2. 필수 구성 요소 설치

“References”를 마우스 오른쪽 버튼으로 클릭하고“Manage NuGet Packages”를 선택하십시오. 다음으로“Npgsql.EntityFrameworkCore.PostgreSQL”및“Npgsql.EntityFrameworkCore.PostgreSQL.Design”을 검색하여 설치하십시오.

3. 공급자 변경

Startup.cs 파일을 엽니 다 . ConfigureServices () 아래 에 다음 코드 블록이 있습니다.

// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<User>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

SQL Server 부분에 주목하십시오. 애플리케이션에 PostgreSQL을 사용하도록 지시합니다.

// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<User, IdentityRole<long>>()
                .AddEntityFrameworkStores<ApplicationDbContext,long>()
                .AddDefaultTokenProviders();

4. 연결 문자열 변경

다음으로 appsettings.json 파일을 열면 이 파일에 기본 SQL Server 연결 문자열이 있습니다.

"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-MyPostgresApp-1a3c6f7e-a81e-4b86-8575-8ccebff9e7b6;Trusted_Connection=True;MultipleActiveResultSets=true"
},

이 SQL Server 연결 문자열을 변경해야합니다. PostgreSQL 연결 문자열을 사용하십시오.

"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Port=5432;Database=myDataBase;User Id=myUsername;Password=myPassword;"
},

5. 데이터베이스 마이그레이션 실행

애플리케이션을 처음 실행하면 테이블이 정의되지 않았다는 오류 페이지가 표시됩니다. "마이그레이션 추가"단추를 추가하면 프레임 워크가 데이터베이스에 필요한 테이블을 작성합니다. PostgreSQL에서 ASP.NET Core를 실행하면됩니다.

 

원본 : https://medium.com/@RobertKhou/asp-net-core-mvc-identity-using-postgresql-database-bc52255f67c4

반응형
반응형


. Net core가 벌써 3으로 올라오고 3달 정도 지났습니다.
개인적으로 좋아하는 프레임워크이기도 하고, 평소 C#을 주로 사용해서 이번 기회에. net core web api와 Xunit, Azure를 이용한 개발부터 배포까지 과정을 정리해보았습니다.


설치

ubuntu 18.04 (WSL2), .Net core 3.0과 VSCode를 사용해 개발합니다.
배포를 제외하곤 CLI 기반으로 진행할 예정이라 dotnet cli를 사용할 수 있는 환경이면 크게 문제는 없습니다.

sudo apt-get update
sudo apt-get install dotnet-sdk-3.0

위 명령어로 설치가 안되면 아래 페이지를 참고하여 진행해주세요.

https://docs.microsoft.com/en-us/dotnet/core/install/linux-package-manager-ubuntu-1804

 

Install .NET Core on Ubuntu 18.04 package manager - .NET Core

Use a package manager to install .NET Core SDK and runtime on Ubuntu 18.04.

docs.microsoft.com

 

dotnet --version

설치 성공

새로운 webapi 템플릿 프로젝트를 dotnet cli를 통해 만들어줍니다.

예제 문법: dotnet new <project type> -o <project name>...dotnet new webapi -o WebApi
cd WebApi

다른 템플릿들은

dotnet new

로 확인할 수 있습니다.


.NET Core Web API Basic

.net core web api는 Controller들이 요청을 처리합니다. WeatherForecstController.cs에서 요청을 받으면 WeatherForecast.cs의 객체를 리턴하는 기본 템플릿 예제입니다.

WeatherForecastController.cs

 

Route(“[controller]”) 라는 속성은

클래스 이름인 WeatherForecastController 에서 Controller 앞에 있는

WeatherForecast 를 기준으로 라우팅한다는 의미입니다.

쉽게 말해서 request를 아래와 같이 요청하도록 한다는 의미입니다.

GET — 127.0.0.1:5001/WeatherForecast

이 요청은 아래 Get() 메소드에 의해서 수행됩니다.

WeatherForecastController.cs

 

Startup.cs 에는 DI를 포함한 각종 세팅 관련 코드를 추가할 수 있습니다.

Program.cs는 프로그램을 빌딩해주는 스캐폴딩이 있습니다.

기본적인 구조 설명이 끝났으니 실제로 실행시켜봅시다.

dotnet run

이제 Postman으로 결과를 확인해봅시다.

(브라우저 주소창에서 해도 상관없음)

수행 결과

 


이제 새로운 Controller를 만들어봅시다.

using Microsoft.AspNetCore.Mvc;
using WebApi.Model;

namespace WebApi.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class SimpleHTTPController : ControllerBase
    {
        [HttpGet]
        [Route("v1/data")]
        public ActionResult<Data> Get()
        {
            return Ok(new Data(1));
        }

        [HttpPost]
        [Route("v1/data")]
        public ActionResult<Data> Post([FromBody] Data dto)
        {
            return CreatedAtAction("Post", new Data(dto.Uid));
        }
    }
}

WebApi/Controllers/SimpleHTTPControllers.cs

 

 

using System;
using System.Text.Json.Serialization;

namespace WebApi.Model
{
    public class Data
    {
        public Data()
        {

        }
        public Data(int Uid)
        {
            this.Uid = Uid;
            this.Date = DateTime.Now;
        }

        public DateTime Date { get; set; }

        public int Uid { get; set; }
    }
}

WebApi/Model/Data.cs

 

Controllers 폴더 아래에 SimpleHTTPController를 생성합니다.

Get method 하나와 Post Method 하나를 각각 만들어봅니다.

Get method는 HTTP OK(200)과 임의의 객체를 return하고,

Post는 HTTP Created(201)과 post request에 지정한 body를 return합니다.

Get

 

Post

 


Xunit 테스트

테스트코드를 작성해보겠습니다.

api

— webapi

— webapiTests

폴더 구조를 위와같이 변경합니다.

webApiTests 폴더를 생성하고 dotnet cli로 xunit 프로젝트를 생성합니다.

 

mkdir WebApiTests
cd WebApiTests

dotnet new xunit

테스트 서버와 테스트 클라이언트 생성을 위한 nuget package를 받습니다.

그리고 테스트 프로젝트에 WebApi 프로젝트의 레퍼런스를 추가합니다.

 

dotnet add package Microsoft.AspNetCore.Mvc.Testing --version 3.0

dotnet add reference ../WebApi/WebApi.csproj

템플릿 파일인 UnitTest01.cs의 이름을 APITests.cs로 변경하고 테스트 코드를 작성합니다.

우리가 만든 2개의 메소드는 Get과 Post이고

 

이 두 메소드는 HTTP OK(200)과 HTTP Created(201)를 각각 리턴합니다.

 

appsetting.json 파일은 WebApi 폴더에 있습니다. 각자 환경에 맞춰 경로를 변경해줍니다.

 

using System;
using Xunit;
using System.Net.Http;
using System.Net;
using Microsoft.AspNetCore.TestHost;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using System.Threading.Tasks;
using WebApi;
using WebApi.Model;
using System.Text.Json;
using System.Text;

namespace WebApiTests
{
    public class APITests
    {

        HttpClient client;
        TestServer testServer;

        public static TheoryData<Data> HTTP_POST_DATA_SET = new TheoryData<Data> { new Data(1) };
        public APITests()
        {
            this.Initalize();
        }

        public void Initalize()
        {
            var configuration = new ConfigurationBuilder()
                .AddJsonFile("/home/key/repository/api/WebApi/appsettings.json")
                .Build();

            testServer = new TestServer(new WebHostBuilder()
                .UseConfiguration(configuration)
                .UseStartup<Startup>()
            );

            client = testServer.CreateClient();
        }

        [Fact]
        public async Task IS_HTTP_GET_200()
        {
            HttpResponseMessage response = null;

            // Act
            response = await client.GetAsync("simplehttp/v1/data");

            // Assert
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }

        [Theory]
        [MemberData("HTTP_POST_DATA_SET")]
        public async Task IS_HTTP_POST_201(Data dto)
        {
            var stringContent = new StringContent(JsonSerializer.Serialize<Data>(dto), UnicodeEncoding.UTF8, "application/json");

            // Act
            var response = await client.PostAsync("simplehttp/v1/data", stringContent);

            // Assert
            Assert.Equal(HttpStatusCode.Created, response.StatusCode);
        }
    }
}

위와 같이 200과 201이 리턴되면 테스트를 통과하는 코드를 작성합니다.

테스트 실행은 아래 명령을 입력합니다.

dotnet test


배포

Azure 서비스 가입을 하시고, dashboard에서 Azure App Service를 생성합니다.

 

만약 대학생이라면 Azure 학생용 스타터 구독을 신청하면 무료로 1GB ram의 App service를 사용할 수 있습니다.

 

https://azure.microsoft.com/ko-kr/offers/ms-azr-0144p/

 

학생용 Microsoft Azure 스타터 제품 | Microsoft Azure

Microsoft Azure의 학생용 제안을 검토하세요. 학생용 Azure 스타터를 사용하여 비용, 약정 또는 시간 제한 없이 Azure 서비스에 액세스할 수 있습니다.

azure.microsoft.com

 

.Net core 3.0 런타임 스택에 linux 운영체제를 선택하시면 됩니다.

https://azure.microsoft.com/ko-kr/services/app-service/

 

Azure App Service – 앱 호스팅 | Microsoft Azure

Azure App Service를 사용하여 모든 플랫폼 혹은 디바이스에서 그 어느 때보다 빠르게 구동되는 웹 및 모바일 클라이언트용 클라우드 앱을 만들 수 있습니다.

azure.microsoft.com

vscode에서 Azure App Service extension을 설치합니다.

 

https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azureappservice

 

Azure App Service - Visual Studio Marketplace

OverviewQ & ARating & Review Azure App Service for Visual Studio Code (Preview) App Service is Azure's fully-managed Platform as a Service (PaaS) that let's you deploy and scale web, mobile, and API apps. Use the Azure App Service extension for VS Code to

marketplace.visualstudio.com

 

Azure App Service extension을 사용하면 Azure로 손쉽게 배포할 수 있습니다.

 

CORS 같은 정책들도 로컬에서 배포할 때는 Startup.cs에서 설정해줬었는데

Azure에서 배포하면 Azure web에서 설정할 수 있어서 매우 편리합니다.

 

Azure App Service extension를 설치하셨으면
아래 명령어로 프로그램을 빌드 합니다.

 

dotnet publish -c release

성공적으로 빌드가 되면

WebApi-> bin -> release -> publish 폴더를 우클릭하여 deploy to web app을 클릭합니다.

 

자신의 Azure 구독과 미리 생성한 App service를 선택하면 자동으로 배포가 됩니다.

결과

 

출처 : https://medium.com/@keyhyuk.kim/net-core-rest-api-%EC%84%9C%EB%B2%84-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B6%80%ED%84%B0-%EB%B0%B0%ED%8F%AC%EA%B9%8C%EC%A7%80-8ad3e630ab44

반응형
반응형

ASP.Net MVC Core에서는 BundleConfig.cs를 제거하고 bundleconfig.json 파일로 대체했습니다. bundleconfig.json에서 번들을 설정해야합니다.. 프로젝트에 이 파일이 없으면이 이름으로 json 파일을 추가하고 사용하면 됩니다.

 

bundleconfig.json

예시

 // Configure bundling and minification for the project.
// More info at https://go.microsoft.com/fwlink/?LinkId=808241
[
  {
    "outputFileName": "wwwroot/css/site.min.css",
    // An array of relative input file paths. Globbing patterns supported
    "inputFiles": [
      "wwwroot/css/site.css"
    ]
  },
  {
    "outputFileName": "wwwroot/js/bundles.min.js",
    "inputFiles": [
      "wwwroot/js/site.js",
      "wwwroot/lib/jquery/dist/jquery.js",
      "wwwroot/lib/jquery/dist/jqueryvalidate.js"
    ],
    // Optionally specify minification options
    "minify": {
      "enabled": true,
      "renameLocals": true
    },
    // Optionally generate .map file
    "sourceMap": false
  }
]

_Layout.cshtml

 <script src="~/js/bundles.min.js"></script>

출처 : https://stackoverflow.com/questions/48415335/how-can-i-use-scripts-render-with-net-core-2-0-mvc-application

반응형
반응형

다음으로 ASP.NET Core Demystified 시리즈에서IActionResult인터페이스 를 구현 하고 해당ActionResult클래스 에서 상속 하는 모든 클래스를 논의하고 시연합니다 이러한 클래스는 컨트롤러 작업의 응답으로 사용되며 다른 사이트로 리디렉션, 다른 컨트롤러 작업으로 리디렉션, JSON 객체 반환 및 파일을 브라우저로 반환하는 것을 포함합니다.

이 글에서는 먼저 IActionResult인터페이스와 인터페이스에 대해 논의한 다음 인터페이스의 사용 가능한 여러 구현 및 각 인터페이스를 사용할 수있는 시나리오에 대한 데모를 보게됩니다.

샘플 프로젝트

코드가 많은 게시물 과 마찬가지로 GitHub에는이 게시물에서 논의 할 작업 결과를 보여주는 실제 프로젝트가 있습니다. 확인 해봐!

https://github.com/exceptionnotfound/AspNetCoreActionResultsDemo

행동 결과는 무엇입니까?

엄밀히 말하자면 Action Results는 IActionResultASP.NET Core MVC 의 인터페이스 를 구현하는 클래스입니다 그러나이 게시물에서 보게 될 모든 작업 결과는 ActionResult클래스 에서 상속됩니다 .

간단히 말해 Action Results는 컨트롤러 작업의 결과로 클라이언트가해야 할 일을 나타내는 클래스입니다. 파일을 가져 오거나 리디렉션하거나 무수히 많은 것들이 필요할 수 있습니다. 일부 조치 결과는 HTTP 상태 코드 만 리턴합니다. 요컨대, 컨트롤러 조치를 호출 한 후 클라이언트가 원할 수있는 가장 일반적인 작업은 조치 결과로 표시됩니다.


 

콘텐츠 협상

요청  Accept 헤더  있는 경우 컨텐츠 협상 ( 약칭 연결 )이 발생합니다 . 서버가 응답을 보낼 형식을 결정하는 프로세스입니다. 기본적으로 ASP.NET Core는 응답에 JSON을 사용하지만 요청 Accept 헤더는 다른 형식 (예 : XML)을 지정할 수 있으며 서버는 지정된 형식으로 응답을 반환하려고 시도합니다.

이미지는 폴란드 바르샤바 협상 라운드 상원 2014 01 이며 위키 미디어에서 발견되며 라이센스에 따라 사용됩니다

서버 가 요청에서 Accept 헤더를 감지 하면 서버가 지원하는 헤더를 찾기 위해 해당 헤더의 미디어 유형을 열거합니다. 서버가 지원할 수있는 미디어 유형이없는 경우 서버는 요청을 생성 할 수있는 지원되는 첫 번째 미디어 유형을 사용합니다 (따라서이 프로세스를 컨텐츠 협상 이라고 하며이 형식을 지금 제게 하지 마십시오 ).

액션 결과 세트

5 가지 주요 작업 결과 세트가 있습니다.

  • 상태 코드 결과
  • 객체 결과가있는 상태 코드
  • 결과 리디렉션
  • 파일 결과
  • 컨텐츠 결과

이러한 각 세트를 개별적으로 논의하고 그 결과의 종류에 대한 예를 보여줍니다. 이 게시물에서 볼 수있는 모든 데모는 GitHub  샘플 프로젝트 에도 있으므로 확인하십시오!

상태 코드 결과

아마도 ASP.NET Core MVC에 의해 정의 된 가장 간단한 종류의 작업 결과는 상태 코드 결과 모음입니다. 이 결과는 단지 클라이언트에게 HTTP 상태 코드를 반환합니다.

OkResult

OkResult(짧은 방법 : Ok()) 반환 200 OK의 상태 코드를.

public IActionResult OkResult()

{

    return Ok();

}

CreatedResult

CreatedResult(짧은 방법 : Created()) 반환 만든 201 생성 된 리소스에 URL과 함께합니다.

public IActionResult CreatedResult()

{

    return Created("http://example.org/myitem", new { name = "testitem" });

}

NoContentResult

NoContentResult(짧은 방법 : NoContent())를 반환 (204) 내용 없음 서버가 요청을 성공적으로 처리되었음을 나타내는 상태 코드 만 반환에 아무것도 없다는 것을.

public IActionResult NoContentResult()

{

    return NoContent();

}

BadRequestResult

BadRequestResult(짧은 방법 BadRequest()) 창 400 잘못된 요청 서버는 상기 요청에 의한 오류로 상기 요청을 처리 할 수 있음을 나타낸다. 요청의 유효성 검사가 실패하고 더 적합한 코드가없는 경우 API에서 종종 사용됩니다.

public IActionResult BadRequestResult()

{

    return BadRequest();

}

무단 결과

UnauthorizedResult(짧은 방법 : Unauthorized()) 반환 무단 (401)를 요청하는 사용자가 (정말라고되어 있어야합니다이 상태 코드를 의미 그렇게 할 수있는 적절한 인증이 없기 때문에 요청을 처리 할 수 없음을 나타내는, 401 인증되지 않은를 ).

public IActionResult UnauthorizedResult()

{

    return Unauthorized();

}

NotFoundResult

NotFoundResult(짧은 방법 : NotFound())을 반환 (404) 찾을 수 없음 요청 된 자원이, 어떤 이유로, 서버에서 찾을 수 없음을 나타내는 상태 코드.

public IActionResult NotFoundResult()

{

    return NotFound();

}

지원되지 않는 MediaTypeResult

UnsupportedMediaTypeResult글을 쓰는 시점에서 짧은 방법이없는 이는, 반환 415 지원되지 않는 미디어 유형 미디어 유형 (요청에 예를 들어, Content-Type 헤더는)이 서버에서 지원하지 않는 것을 나타냅니다. 예를 들어, 사용자가 .bmp 형식으로 이미지를 업로드하려고 시도 할 때 서버는이 상태 코드를 리턴 할 수 있지만 서버는 .jpeg 만 허용 합니다.

public IActionResult UnsupportedMediaTypeResult()

{

    return new UnsupportedMediaTypeResult();

}

기타 상태 코드

위의 상태 코드 결과는 가능한 모든 HTTP 상태 코드를 포함하지는 않습니다. 전용 작업 결과가 제공되지 않은 상태 코드를 반환해야하는 상황에서는 일반 StatusCodeResult(짧은 방법 :)을 사용할 수 있습니다 StatusCode().

public IActionResult StatusCodeResult(int statusCode)

{

    return StatusCode(statusCode);

}

객체 결과가있는 상태 코드

이러한 작업 결과는 대부분 이전 섹션에서 본 결과의 과부하입니다. 그러나 컨텐츠 협상으로 인해 브라우저 또는 다른 요청자가 다르게 처리합니다.

OkObjectResult

OkObjectResult수익률 200 OK 뿐만 아니라 객체입니다.

public IActionResult OkObjectResult()

{

    var result = new OkObjectResult(new { message = "200 OK", currentDate = DateTime.Now });

    return result;

}

CreateObjectResult

CreatedObjectResult반환 만든 (201) 및 사용자 정의 객체입니다.

public IActionResult CreatedObjectResult()

{

    var result = new CreatedAtActionResult("createdobjectresult", "statuscodeobjects", "", new { message = "201 Created", currentDate = DateTime.Now });

    return result;

}

BadRequestObjectResult

은 BadRequestObjectResult당신이하지 무슨 생각을 정확히 수행; 400 잘못된 요청 과 개체를 반환 합니다.

public IActionResult BadRequestObjectResult()

{

    var result = new BadRequestObjectResult(new { message = "400 Bad Request", currentDate = DateTime.Now });

    return result;

}

NotFoundObjectRequest

지금 당신이 패턴을보고 있다고 상상하십니까? NotFoundObjectRequest반환 (404) 찾을 수 없음 과 객체.

public IActionResult NotFoundObjectResult()

{

    var result = new NotFoundObjectResult(new { message = "404 Not Found", currentDate = DateTime.Now });

    return result;

}

ObjectResult

위 유형에서 다루지 않는 시나리오의 경우 ObjectResult클래스가 있습니다. 지정된 상태 코드와 객체를 반환합니다.

public IActionResult ObjectResult(int statusCode)

{

    var result = new ObjectResult(new { statusCode = statusCode, currentDate = DateTime.Now });

    result.StatusCode = statusCode;

    return result;

}

결과 리디렉션

때로는 클라이언트 (예 : 브라우저)에게 다른 위치로 리디렉션하도록 지시해야합니다. 리디렉션 결과가 나오는 위치는 클라이언트에게 리디렉션 위치를 알려줍니다. 때로는 동일한 프로젝트에서 다른 작업으로 이동해야하는 경우도 있지만 외부 리소스로 리디렉션해야하는 경우도 있습니다.

RedirectResult

기본 RedirectResult클래스 (short method Redirect():)는 지정된 URL로 리디렉션됩니다.

public IActionResult RedirectResult()

{

    return Redirect("https://www.exceptionnotfound.net");

}

LocalRedirectResult

LocalRedirectResult(짧은 방법 : LocalRedirect()) 동일한 응용 프로그램 내에서 URL로 리디렉션. 예를 들어 사이트가 http://www.mysite.com 이고 URL http://www.mysite.com/redirects/target (예 : "redirects"컨트롤러의 "target"작업) 으로 리디렉션하려는 경우 ), 당신은 이렇게 할 수 있습니다 :

public IActionResult LocalRedirectResult()

{

    return LocalRedirect("/redirects/target");

}

RedirectToActionResult

매우 일반적인 RedirectToActionResult클래스 (short method RedirectToAction():)는 클라이언트를 동일한 응용 프로그램 내의 특정 작업 및 컨트롤러로 리디렉션합니다. LocalRedirectResult예제 에서와 동일한 리디렉션을 수행하려면 다음을 수행하십시오.

public IActionResult RedirectToActionResult()

{

    return RedirectToAction("target");

}

RedirectToRouteResult

ASP.NET Core MVC에는 라우팅 개념이 있으며이를 통해 특정 컨트롤러 및 작업에 매핑되는 URL 템플릿을 만들 수 있습니다. 이에 따라 애플리케이션에 이미 정의 된 특정 경로로 리디렉션되는 결과 RedirectToRouteResult(짧은 방법 :)도 있습니다 RedirectToRoute().

Startup.cs 클래스에 다음 경로가 정의되어 있다고 가정 해 봅시다.

app.UseMvc(routes =>

{

    routes.MapRoute(

        name: "default",

        template: "{controller=Home}/{action=Index}/{id?}");

});

특정 경로와 RedirectToRoute()짧은 방법을 사용하여 리디렉션 하고 이전 두 예제와 동일한 대상 작업으로 끝날 수 있습니다.

public IActionResult RedirectToRouteResult()

{

    return RedirectToRoute("default", new { action = "target", controller = "redirects" });

}

파일 결과

요청자에게 파일을 반환해야하는 경우 파일 결과를 통해 다양한 형식을 사용할 수 있습니다.

이 데모에서는 wwwroot / downloads 폴더에 pdf-sample.pdf라는 파일이 있으며이 파일을 사용하여 다양한 파일 결과 클래스의 작동 방식을 보여줍니다.

FileResult

기본 FileResult클래스 (short method File():)는 주어진 경로에서 파일을 반환합니다. 이 경우 경로는 / wwwroot / downloads이므로 작업은 다음과 같습니다.

public IActionResult FileResult()

{

    return File("~/downloads/pdf-sample.pdf", "application/pdf");

}

"application / pdf"는 이 파일과 관련된 MIME 유형 입니다.

FileContentResult

주어진 파일의 내용 만 byte[]전체 파일이 아닌 바이트 배열 ( 로 반환하려는 경우가 있습니다. 이 시나리오에서는 FileContentResult클래스를 사용할 수 있습니다 여전히 MIME 유형을 지정해야합니다.

public IActionResult FileContentResult()

{

    //Get the byte array for the document

    var pdfBytes = System.IO.File.ReadAllBytes("wwwroot/downloads/pdf-sample.pdf");



    //FileContentResult needs a byte array and returns a file with the specified content type.

    return new FileContentResult(pdfBytes, "application/pdf");

}

VirtualFileResult

VirtualFileResult클래스를 사용하여 프로젝트의 / wwwroot 폴더에서 파일을 가져올 수도 있습니다 .

public IActionResult VirtualFileResult()

{

    //Paths given to the VirtualFileResult are relative to the wwwroot folder.

    return new VirtualFileResult("/downloads/pdf-sample.pdf", "application/pdf");

}

PhysicalFileResult

마지막으로 프로젝트의 일부가 아닌 서버의 실제 경로에서 파일을 가져와야 할 경우 PhysicalFileResult클래스를 사용할 수 있습니다 .

public IActionResult PhysicalFileResult()

{

    return new PhysicalFileResult(_hostingEnvironment.ContentRootPath + "/wwwroot/downloads/pdf-sample.pdf", "application/pdf");

}

참고 _hostingEnvironment.ContentRootPath응용 프로그램 루트가 아닌 /의 wwwroot 폴더의 경로입니다.

컨텐츠 결과

최종 결과 클래스 세트는 다양한 종류의 컨텐츠를 컨트롤러에 리턴하도록 설계된 컨텐츠 결과 클래스입니다.

ViewResult

아마도 모든 ASP.NET Core MVC에서 가장 기본적인 Result 클래스는 ViewResult클래스 (short method :)이며 View()뷰를 반환합니다.

public IActionResult Index()

{

    return View();

}

기본적 View()으로이 메소드는 컨트롤러와 이름이 같은 폴더에서 호출 된 조치와 이름이 같은보기를 리턴합니다. 이 경우 컨트롤러는 "Content"이고 작업은 "Index"이므로 ASP.NET Core MVC는 /Views/Content/Index.cshtml에서 파일을 찾습니다. View()short 메소드의 오버로드를 사용하여 다른 뷰가 리턴되도록 지정할 수 있습니다 .

PartialViewResult

다음 과 같이 클래스 (short method :)를 사용하여  액션에서 부분 뷰 를 반환 할 수도 있습니다 .PartialViewResultPartialView()

public IActionResult PartialViewResult()

{

    return PartialView();

}

데모에서 위의 코드는 / Views / Content 디렉토리와 / Views / Shared 디렉토리 모두에서 "PartialViewResult"라는 이름의 뷰를 찾고 / Views / Shared에서 찾습니다.

JsonResult

클래스 를 사용하여 애플리케이션에서 JSON (JavaScript Object Notation) 컨텐츠를 쉽게 리턴 할 수 있습니다 JsonResult(짧은 메소드 :) Json().

public IActionResult JsonResult()

{

    return Json(new { message = "This is a JSON result.", date = DateTime.Now });

}

ContentResult

위 카테고리 중 하나에 속하지 않는 컨텐츠를 리턴해야하는 경우 일반 ContentResult오브젝트 (짧은 메소드 Content():)를 사용하여 컨텐츠를 리턴 할 수 있습니다. 데모에서는 간단한 메시지를 리턴하지만이 클래스를 사용하여 MediaTypeHeaderValue 또는 컨텐츠 유형 을 지정하여보다 복잡한 컨텐츠를 리턴 할 수 있습니다 .

public IActionResult ContentResult()

{

    return Content("Here's the ContentResult message.");

}

요약

ASP.NET Core MVC의 작업 결과 클래스는 컨트롤러에서 사용할 기능의 상당 부분을 제공합니다. 상태 코드, 객체, 파일, 기타 컨텐츠를 반환하고 클라이언트를 리디렉션합니다. ASP.NET Core MVC와 그 기능에 익숙해 짐에 따라 이러한 클래스는 두 번째 특성이됩니다. 그때까지이 게시물을 빠른 참조로 사용하여 코드를 작성하십시오.

내 자습서와 마찬가지로 GitHub 에는 ASP.NET Core MVC에서 사용할 수있는 모든 동작 결과를 익히는 데 사용할 수 있는 작동 코드 샘플 이 있습니다.

의견 에이 게시물과 데모 프로젝트에 대해 어떻게 생각했는지 알려주세요!

행복한 코딩!

 

출처 : https://exceptionnotfound.net/asp-net-core-demystified-action-results/
반응형

+ Recent posts