웹 API 프로젝트 만들기

원본참조

WEB API 프로젝트를 만들어서 IIS 서버에 게시하기 까지 , 다소 시행 착오를 겪었다.
MSDN에서 소스를 찾아서 Test를 하면서 동작 하지 않을 거라는 의심을 하지 않았다.
그런데 애석하게도 환경설정등 동작 요건과 관련한 사소한 누락이 있어도 문재를 해결하지 쉽지 않다.
이로 인해 많은 혼란을 겪었다.
여기서 다루고 있는 내용은 코드실행과 IIS 서버에 게시 까지 확인한 내용이다. 차후 혼선이 없도록 기록 해 둔다.
기타 발생하는 문제는 추가로 기록 하기로 하자.
ASP.NET Web API 2 in VS 2017 소스

 

개요

HTTP 웹 페이지를 제공 데 사용 되지 않습니다. HTTP은 서비스 및 데이터를 노출 하는 Api를 구축 하기 위한 강력한 플랫폼 이기도 합니다. HTTP 쉽고 유연 하 고, 어디서 나 쉽게는입니다. 상상할 수 있는 거의 모든 플랫폼에는 HTTP 라이브러리를 HTTP 서비스에는 다양 한 브라우저, 모바일 장치 및 기존 데스크톱 응용 프로그램을 포함 한 클라이언트를 연결할 수 있으므로 합니다.
ASP.NET Web API는 웹 Api는.NET Framework를 기반으로 구축 하기 위한 프레임 워크. 이 자습서에서는 웹 제품 목록을 반환 하는 API를 만드는 데 ASP.NET Web API를 사용 합니다.

자습서에서 사용 되는 소프트웨어 버전

참조 ASP.NET Core와 Visual Studio for Windows는 web API를 만드는 이 자습서의 최신 버전에 대 한 합니다.

웹 API 프로젝트 만들기

이 자습서에서는 웹 제품 목록을 반환 하는 API를 만드는 데 ASP.NET Web API를 사용 합니다. 프런트 엔드 웹 페이지 jQuery를 사용 하 여 결과 표시 합니다.

프로젝트 만들기

Visual Studio를 시작 하 고 선택 새 프로젝트 에서 시작 페이지. 또는에서 파일 메뉴 선택 새로 차례로 프로젝트합니다.
템플릿 창 선택 설치 된 템플릿 확장는 Visual C# 노드. 아래 **Visual C#**선택, 합니다. 프로젝트 템플릿 목록에서 선택 ASP.NET 웹 응용 프로그램합니다. “ProductsApp” 프로젝트 이름을 지정 하 고 클릭 확인합니다.

새 ASP.NET 프로젝트 대화 상자에서는 서식 파일입니다. 아래 “폴더 추가 및에 대 한 참조를 핵심”, 확인 웹 API합니다. 확인을 클릭합니다.

참고로 visual studio 2015의 경우와 같은 그림이 약간 다르게 보이더라도 프로젝트 생성을 실행합니다.

만일 AZure Web App가 설치되지 않았다면 그림과 같은 창이 보이는데 경고를 무시하고 ‘취소’를 눌러 창을 닫습니다.

참고
사용 하 여 웹 API 프로젝트를 만들 수도 있습니다는 “웹 API” 템플릿. 웹 API 템플릿은 ASP.NET MVC를 사용 하 여 API 도움말 페이지를 제공 하기. MVC 없이 웹 API를 표시 하려는 때문에이 자습서에 빈 템플릿을 사용 합니다.일반적으로 웹 API를 사용 하는 ASP.NET MVC 알 필요가 없습니다.

모델 추가

모델은 응용 프로그램에서 데이터를 나타내는 개체입니다. ASP.NET Web API 자동으로 JSON, XML, 또는 다른 형식으로 모델을 직렬화 하 고 HTTP 응답 메시지의 본문에 serialize 된 데이터를 쓸 수 있습니다. 클라이언트에는 serialization 형식을 읽을 수,으로 개체를 역직렬화 할 수 있습니다. 대부분의 클라이언트에는 XML 또는 JSON 구문 분석할 수 있습니다. 또한 클라이언트는 HTTP 요청 메시지의 Accept 헤더를 설정 하 여 원하는 어떤 형식을 나타낼 수 있습니다.
제품을 나타내는 간단한 모델을 만들어 보겠습니다.
솔루션 탐색기 표시 되지 않는 경우 클릭는 보기 메뉴와 선택 솔루션 탐색기합니다. 솔루션 탐색기에서 모델 폴더를 마우스 오른쪽 단추로 클릭 합니다. 상황에 맞는 메뉴에서 선택 추가 다음 선택 클래스합니다.

클래스의 이름을 “제품”합니다. 다음 속성을 추가 Product 클래스입니다.
C# 코드를 추가 합니다.

namespace ProductsApp.Models
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Category { get; set; }
        public decimal Price { get; set; }
    }
}
컨트롤러 추가

웹 API에는 컨트롤러 는 HTTP 요청을 처리 하는 개체입니다. 제품 목록 또는 ID로 지정 된 단일 제품 중 하나를 반환할 수 있는 컨트롤러 추가
참고
ASP.NET MVC를 사용한 경우 이미 잘 알고 있다면 컨트롤러입니다. Web API 컨트롤러 MVC 컨트롤러 유사 하지만 상속 된 ApiController 클래스 대신는 컨트롤러 클래스입니다.
솔루션 탐색기, Controllers 폴더를 마우스 오른쪽 단추로 클릭 합니다. 선택 추가 선택한 후 컨트롤러합니다.

추가 스 캐 폴드 대화 상자에서 웹 API 컨트롤러-비어 있지합니다. 추가를 클릭합니다.

컨트롤러 추가 대화 상자에서 컨트롤러 이름 “ProductsController”합니다. 추가를 클릭합니다.

스 캐 폴딩을 ProductsController.cs Controllers 폴더의 명명 된 파일을 만듭니다.

참고
컨트롤러에 컨트롤러 이라는 폴더에 넣이 필요가 없습니다. 폴더 이름은 원본 파일을 구성 하는 편리한 방법인을입니다.
이 파일이 열려 있지 않으면 이미 열려는 파일을 두 번 클릭 합니다. 이 파일에 코드를 다음으로 바꿉니다.
C# productsController에 아래 코드를 추가 합니다.

using ProductsApp.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;
namespace ProductsApp.Controllers
{
    public class ProductsController : ApiController
    {
        Product[] products = new Product[]
        {
            new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
            new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
            new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }
        };
        public IEnumerable<Product> GetAllProducts()
        {
            return products;
        }
        public IHttpActionResult GetProduct(int id)
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                return NotFound();
            }
            return Ok(product);
        }
    }
}

예를 간단히 유지 하기 위해 제품 컨트롤러 클래스의 내부 고정된 배열에 저장 됩니다. 물론, 실제 응용 프로그램에서 데이터베이스를 쿼리 또는 다른 외부 데이터 소스를 사용 하 여가 있습니다.
컨트롤러는 제품을 반환 하는 두 개의 메서드를 정의 합니다.

  • GetAllProducts 메서드로 제품의 전체 목록을 반환는 IEnumerable<제품> 유형입니다.
  • GetProduct 단일 제품의 id를 조회 메서드

정말 간단하죠. 작업 중인 웹 API 해야합니다. 컨트롤러의 각 메서드에 하나 이상의 Uri에 해당합니다.
컨트롤러 메서드
URI
GetAllProducts
/ api/제품
GetProduct
/api/products/id
에 대 한는 GetProduct 메서드는 id URI에 자리 표시자입니다. 예를 들어 ID 5 인 제품을 가져오려면 URI는 api/products/5합니다.
Web API 컨트롤러 메서드를 HTTP 요청을 라우팅하 하는 방법에 대 한 자세한 내용은 참조 ASP.NET Web API에서 라우팅합니다.

Javascript 및 jQuery를 사용 하여 웹 API를 호출 방법.

이 섹션에서는 AJAX를 사용 하 여 web API를 호출 하는 HTML 페이지를 추가 합니다. JQuery AJAX 호출을 수행 하 고 결과 페이지를 업데이트 하려면 사용 합니다.
솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭 하 고 선택 추가을 선택한 후 새 항목합니다.

새 항목 추가 대화 상자에서는 노드 아래의 **Visual C#**를 선택한 후는 HTML 페이지 항목입니다. 페이지 이름을 “index.html”합니다.

이 파일의 모든 개체를 다음과 같이 바꿉니다.
HTML복사

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Product App</title>
</head>
<body>
  <div>
    <h2>All Products</h2>
    <ul id="products" />
  </div>
  <div>
    <h2>Search by ID</h2>
    <input type="text" id="prodId" size="5" />
    <input type="button" value="Search" onclick="find();" />
    <p id="product" />
  </div>
  <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
  <script>
    var uri = 'api/products';
    $(document).ready(function () {
      // Send an AJAX request
      $.getJSON(uri)
          .done(function (data) {
            // On success, 'data' contains a list of products.
            $.each(data, function (key, item) {
              // Add a list item for the product.
              $('<li>', { text: formatItem(item) }).appendTo($('#products'));
            });
          });
    });
    function formatItem(item) {
      return item.Name + ': $' + item.Price;
    }
    function find() {
      var id = $('#prodId').val();
      $.getJSON(uri + '/' + id)
          .done(function (data) {
            $('#product').text(formatItem(data));
          })
          .fail(function (jqXHR, textStatus, err) {
            $('#product').text('Error: ' + err);
          });
    }
  </script>
</body>
</html>

여러 가지 방법으로 jQuery를 가져올 수 있습니다. 이 예에서 사용 된 Microsoft Ajax CDN합니다. 다운로드할 수도 있습니다 http://jquery.com/ , 및 “웹 API” ASP.NET 프로젝트 템플릿에 jQuery도 포함 됩니다.

제품 목록 가져오기 코드

제품 목록이 받으려면 다음으로 HTTP GET 요청을 보내 “/api/제품”합니다.
JQuery getJSON 함수 AJAX 요청을 보냅니다. 응답에 대 한 JSON 개체 배열을 포함합니다. done 함수 요청이 성공 하면 호출 되는 콜백을 지정 합니다. 콜백에서 제품 정보 DOM 업데이트 됩니다.
HTML복사

$(document).ready(function () {
    // Send an AJAX request
    $.getJSON(apiUrl)
        .done(function (data) {
            // On success, 'data' contains a list of products.
            $.each(data, function (key, item) {
                // Add a list item for the product.
                $('<li>', { text: formatItem(item) }).appendTo($('#products'));
            });
        });
});
ID 별로 제품 가져오기 코드

ID 별로 제품을 받으려면 다음으로 HTTP GET 요청을 보내 “/api/제품/id“여기서 id 제품 ID입니다.
JavaScript복사

function find() {
    var id = $('#prodId').val();
    $.getJSON(apiUrl + '/' + id)
        .done(function (data) {
            $('#product').text(formatItem(data));
        })
        .fail(function (jqXHR, textStatus, err) {
            $('#product').text('Error: ' + err);
        });
}

여전히 호출 getJSON AJAX 요청 하지만이 이번에 보내도록 요청 URI의에서 ID 입력 합니다. 이 요청은 응답에는 단일 제품의 JSON 표현입니다.

응용 프로그램  Test 실행

F5 키를 눌러 응용 프로그램 디버깅을 시작 합니다. 웹 페이지는 다음과 같이 표시 됩니다.

제품 id를 얻으려면 ID를 입력 하 고 선택은 취소:

잘못 된 ID를 입력 하면 서버에서 HTTP 오류를 반환 합니다.

F12 키를 사용 하 여 HTTP 요청 및 응답을 보려면

HTTP 서비스를 사용 하는 경우에 HTTP 요청을 보고 요청 메시지에 매우 유용할 수 있습니다. Internet Explorer 9의 F12 개발자 도구를 사용 하 여이 수행할 수 있습니다. Internet Explorer 9에서 누릅니다 F12 는 도구를 엽니다. 클릭는 네트워크 탭 및 키를 눌러 캡처 시작합니다. 웹 페이지 및 키를 눌러로 돌아가서 이제 F5 웹 페이지를 다시 로드 합니다. Internet Explorer 브라우저와 웹 서버 사이의 HTTP 트래픽을 캡처합니다. 요약 보기에는 페이지에 대 한 모든 네트워크 트래픽을 표시합니다.

상대 URI에 대 한 항목을 찾습니다 “api/제품 /”입니다. 이 항목을 선택 하 고 클릭 자세히 보기로 이동합니다. 세부 정보 뷰에서 요청 및 응답 헤더 및 본문을 보려면 탭이 있습니다. 예를 들어, 클릭는 요청 헤더 탭에서 클라이언트 요청 됨을 확인할 수 있습니다 “응용 프로그램/json” Accept 헤더에 있습니다.

응답 본문 탭을 클릭 하면 JSON으로 제품 목록을 serialize 하는 방법을 확인할 수 있습니다. 다른 브라우저에 비슷한 기능이 있습니다. 또 다른 유용한 도구는 Fiddler, 웹 디버깅 프록시입니다. 사용할 수 있습니다 Fiddler HTTP 트래픽을 볼 수 및 HTTP 요청을 작성 하 요청에 HTTP 헤더에 대 한 모든 권한을 제공.

 

“웹 API 프로젝트 만들기”의 112개의 댓글

  1. My partner and I absolutely love your blog and find nearly all
    of your post’s to be just what I’m looking for.
    can you offer guest writers to write content to suit your
    needs? I wouldn’t mind creating a post or elaborating on some of the subjects you write in relation to here.
    Again, awesome weblog!

  2. I just want to mention I’m new to weblog and definitely savored this web blog. Almost certainly I’m going to bookmark your website . You definitely come with exceptional posts. Thanks a bunch for sharing with us your website.

  3. I don’t even know how I ended up here, but I thought this post was good. I do not know who you are but certainly you are going to a famous blogger if you aren’t already Cheers!

  4. Oh my goodness! an outstanding article man. Thank you Nonetheless I am experiencing concern with ur rss. Don?t know why Incapable to sign up for it. Is there any person obtaining similar rss problem? Anybody who knows kindly respond. Thnkx

  5. A remarkable share, I simply given this onto a coworker who was doing a little analysis on this. And he in fact bought me breakfast since I found it for him. smile. So let me rephrase that: Thnx for the treat! Yet yeah Thnkx for spending the moment to review this, I really feel highly concerning it as well as love reading more on this subject. Ideally, as you become knowledge, would certainly you mind updating your blog site with even more information? It is very practical for me. Large thumb up for this post!

  6. Attractive component to content. I just stumbled upon your web site and in accession capital to assert that I acquire in fact enjoyed account your blog posts.

    Anyway I’ll be subscribing on your augment and even I fulfillment you access constantly rapidly.

  7. I?m impressed, I need to state. Actually rarely do I come across a blog that?s both educative and entertaining, and also let me inform you, you have struck the nail on the head. Your suggestion is exceptional; the issue is something that inadequate individuals are speaking smartly about. I am very delighted that I stumbled across this in my look for something associating with this.

  8. An excellent share, I just offered this onto an associate who was doing a little evaluation on this. And also he actually got me breakfast due to the fact that I discovered it for him. smile. So let me rephrase that: Thnx for the treat! Yet yeah Thnkx for investing the time to discuss this, I feel strongly about it as well as like learning more on this topic. Preferably, as you become knowledge, would certainly you mind updating your blog with more details? It is extremely practical for me. Huge thumb up for this post!

  9. Good article. I discover something more challenging on various blogs day-to-day. It will constantly be stimulating to review web content from other writers and also practice a little something from their store. I?d choose to make use of some with the web content on my blog site whether you don?t mind. Natually I?ll provide you a web link on your internet blog site. Thanks for sharing.

  10. Oh my benefits! a remarkable post man. Thank you Nevertheless I am experiencing problem with ur rss. Don?t recognize why Not able to sign up for it. Is there any individual obtaining similar rss issue? Anybody who knows kindly respond. Thnkx

  11. Aw, this was a really wonderful message. In concept I wish to place in composing like this additionally? taking some time and actual effort to make a great post? however what can I say? I hesitate alot and never appear to get something done.

  12. This is the appropriate blog for any individual who wants to discover this topic. You understand a lot its practically difficult to suggest with you (not that I really would want?HaHa). You certainly placed a brand-new spin on a topic thats been blogged about for years. Great stuff, just wonderful!

  13. I discovered your blog site on google and also check a few of your very early messages. Continue to keep up the very good run. I just added up your RSS feed to my MSN News Visitor. Seeking onward to finding out more from you later on!?

  14. I’m impressed, I must say. Seldom do I come across a blog that’s both equally educative and
    interesting, and without a doubt, you’ve hit
    the nail on the head. The problem is something that not enough men and women are speaking intelligently about.
    I am very happy I found this in my hunt for
    something relating to this.

  15. A remarkable share, I simply offered this onto an associate who was doing a little evaluation on this. And he in fact purchased me morning meal because I discovered it for him. smile. So let me rephrase that: Thnx for the treat! Yet yeah Thnkx for investing the time to discuss this, I feel strongly regarding it and enjoy reading more on this subject. Preferably, as you come to be knowledge, would certainly you mind updating your blog site with even more details? It is very useful for me. Big thumb up for this article!

  16. Your style is really unique in comparison to other people I have read stuff from. I appreciate you for posting when you’ve got the opportunity, Guess I’ll just bookmark this page.

  17. You have made some really good points there. I looked on the internet to find out more about the issue and found most people will go along with your views on this web site.

  18. This is the ideal blog for anyone who wishes to discover this subject. You understand so much its practically tough to say with you (not that I actually would want?HaHa). You absolutely placed a new spin on a topic thats been covered for years. Wonderful stuff, simply fantastic!

  19. I blog often and I seriously thank you for your content. This article has truly peaked my interest. I am going to book mark your site and keep checking for new information about once a week. I subscribed to your RSS feed too.

  20. A motivating discussion is definitely worth comment. I do think that you ought to publish more on this subject matter, it may not be a taboo matter but typically people do not talk about these issues. To the next! Best wishes!!

  21. Next time I read a blog, Hopefully it does not fail me as much as this particular one. I mean, I know it was my choice to read through, but I really thought you would probably have something useful to say. All I hear is a bunch of moaning about something you can fix if you were not too busy searching for attention.

  22. Good post. I learn something new and challenging on sites I stumbleupon everyday. It’s always exciting to read through content from other writers and use a little something from their sites.

  23. Hello there! I could have sworn I’ve visited your blog before but after looking at many of the articles I realized it’s new to me. Anyhow, I’m definitely happy I came across it and I’ll be book-marking it and checking back frequently!

  24. An outstanding share! I have just forwarded this onto a colleague who has been doing a little homework on this. And he actually ordered me dinner simply because I stumbled upon it for him… lol. So allow me to reword this…. Thank YOU for the meal!! But yeah, thanks for spending the time to talk about this matter here on your blog.

  25. I seriously love your blog.. Excellent colors & theme. Did you build this amazing site yourself? Please reply back as I’m wanting to create my very own site and would like to know where you got this from or exactly what the theme is called. Appreciate it!

  26. Aw, this was an extremely good post. Spending some time and actual effort to produce a really good article… but what can I say… I procrastinate a lot and don’t manage to get nearly anything done.

  27. You’ve made some good points there. I looked on the internet for more information about the issue and found most individuals will go along with your views on this web site.

  28. I’m impressed, I must say. Seldom do I come across a blog that’s both educative and interesting, and without a doubt, you have hit the nail on the head. The issue is something which not enough people are speaking intelligently about. Now i’m very happy that I stumbled across this in my hunt for something regarding this.

  29. I have to thank you for the efforts you have put in penning this blog. I really hope to check out the same high-grade content from you in the future as well. In truth, your creative writing abilities has encouraged me to get my very own website now 😉

  30. Right here is the right web site for anyone who would like to find out about this topic. You understand so much its almost hard to argue with you (not that I personally will need to…HaHa). You definitely put a new spin on a subject which has been discussed for ages. Excellent stuff, just excellent!

  31. After exploring a few of the blog posts on your blog, I seriously appreciate your way of blogging. I saved as a favorite it to my bookmark website list and will be checking back soon. Please check out my website too and let me know what you think.

  32. Having read this I believed it was extremely enlightening. I appreciate you taking the time and energy to put this informative article together. I once again find myself personally spending a significant amount of time both reading and posting comments. But so what, it was still worthwhile!

  33. A motivating discussion is worth comment. I do think that you need to write more on this issue, it may not be a taboo subject but usually people do not discuss these subjects. To the next! Cheers!!

  34. Hi, There’s no doubt that your web site could be having browser compatibility problems. When I take a look at your site in Safari, it looks fine but when opening in I.E., it’s got some overlapping issues. I merely wanted to give you a quick heads up! Apart from that, great website!

  35. This is a very good tip particularly to those fresh to the blogosphere. Brief but very precise information… Thank you for sharing this one. A must read article!

  36. I must thank you for the efforts you’ve put in penning this blog. I’m hoping to check out the same high-grade blog posts by you in the future as well. In fact, your creative writing abilities has motivated me to get my very own blog now 😉

  37. I’m impressed, I must say. Rarely do I come across a blog that’s both educative and entertaining, and without a doubt, you have hit the nail on the head. The issue is an issue that too few men and women are speaking intelligently about. Now i’m very happy I came across this in my search for something concerning this.

  38. The very next time I read a blog, Hopefully it does not disappoint me as much as this one. After all, I know it was my choice to read, nonetheless I truly believed you’d have something helpful to talk about. All I hear is a bunch of crying about something you can fix if you weren’t too busy searching for attention.

  39. I blog quite often and I truly appreciate your information. This great article has truly peaked my interest. I’m going to take a note of your site and keep checking for new details about once per week. I subscribed to your Feed as well.

  40. Good post. I learn something new and challenging on websites I stumbleupon every day. It will always be exciting to read through content from other authors and use a little something from their websites.

  41. Next time I read a blog, Hopefully it does not fail me just as much as this one. I mean, I know it was my choice to read, however I really thought you’d have something useful to talk about. All I hear is a bunch of complaining about something that you could fix if you weren’t too busy looking for attention.

  42. I really love your site.. Excellent colors & theme. Did you develop this website yourself? Please reply back as I’m trying to create my own blog and would love to know where you got this from or exactly what the theme is named. Many thanks!

  43. I’m amazed, I must say. Rarely do I come across a blog that’s both educative and amusing, and let me tell you, you have hit the nail on the head. The issue is an issue that not enough folks are speaking intelligently about. Now i’m very happy I stumbled across this during my search for something regarding this.

  44. I was very happy to discover this website. I want to to thank you for ones time just for this wonderful read!! I definitely liked every part of it and I have you bookmarked to check out new information in your site.

  45. Having read this I believed it was really informative. I appreciate you finding the time and energy to put this content together. I once again find myself spending a lot of time both reading and posting comments. But so what, it was still worthwhile!

  46. There are some intriguing moments in this write-up but I don?t know if I see all of them facility to heart. There is some legitimacy yet I will certainly take hold viewpoint up until I check out it further. Excellent write-up, thanks as well as we want more! Contributed to FeedBurner too

  47. You are so cool! I don’t suppose I have read through anything like this before. So great to discover another person with original thoughts on this topic. Seriously.. thanks for starting this up. This web site is something that’s needed on the internet, someone with some originality!

  48. When I originally commented I appear to have clicked the -Notify me when new comments are added- checkbox and from now on each time a comment is added I receive four emails with the exact same comment. Perhaps there is a way you can remove me from that service? Many thanks!

  49. After going over a number of the blog posts on your site, I truly like your way of writing a blog. I bookmarked it to my bookmark website list and will be checking back soon. Please check out my web site as well and let me know your opinion.

  50. Hi, I do believe this is an excellent blog. I stumbledupon it 😉 I’m going to return once again since i have book-marked it. Money and freedom is the greatest way to change, may you be rich and continue to help others.

  51. Howdy! I could have sworn I’ve been to this blog before but after going through a few of the posts I realized it’s new to me. Anyhow, I’m certainly pleased I found it and I’ll be book-marking it and checking back regularly!

  52. Hi, I do think this is an excellent web site. I stumbledupon it 😉 I’m going to revisit once again since i have bookmarked it. Money and freedom is the best way to change, may you be rich and continue to guide others.

  53. With havin so much written content do you ever run into any issues of plagorism or copyright violation? My site has a lot of completely unique content I’ve either written myself or outsourced but it appears a lot of it is popping it up all over the web without my permission. Do you know any ways to help protect against content from being ripped off? I’d certainly appreciate it.

  54. I have to thank you for the efforts you’ve put in penning this blog. I really hope to see the same high-grade blog posts by you later on as well. In fact, your creative writing abilities has motivated me to get my very own website now 😉

  55. Aw, this was a very nice post. Taking a few minutes and actual effort to create a superb article… but what can I say… I procrastinate a lot and never manage to get nearly anything done.

댓글 남기기