2016-06-23 4 views
0

Web API(asp net 5)のRESTサービスで、Webサイトから要求が送信されましたが、サービスが要求オプションをWebサイトに送信すると、返信はHTTP 1/1 404 Not Foundと表示されます。オプションに対するサーバーの応答が見つかりませんでした

Fiddler Screenshot of the "Options" request


サービスのコントローラは、ウェブサイトにアクセスしている

public class Startup { 
     public void ConfigureServices (IServiceCollection services) { 
     services.AddCors(); 
     services.AddMvc(); 
    } 
} 


機能によって設定されています:

[Route("/operator")] // localhost:5000/operator 
public class OperatorController : Controller 
[EnableCors(origins:'*', headers>'*', methods:'*'); 
public IActionResult Index() 
{ 
    return new HttpOkObject("Hello, select your operation"); 
} 

(クラス呼び出し、インデックスへのルートを送る)この機能にアクセスするウェブサイトが追加

<script type="text/javascript"> 
    $(document).ready(function() { 

     var options = {}; 
     options.url = "http://localhost:5000/installments"; 
     options.type = "GET"; 
     options.contentType = "application/jsonp"; 
     // options.dataType="jsonp"; 

     options.success = function (results) { 
      alert(results.join); 
     }; 

     options.error = function(evt){ 
      alert(evt.status + " - " + evt.statusText) 
     }; 

     $.ajax(options); 
    }); 
</script> 


[EDIT] AJAXにラインを使用して実装され

<pre><code>app.Use(async (context, next) => { context.Response.Headers.Append("Access-Control-Allow-Origin", "*"); await next(); });</code></pre> 

app.UseMvc();

必要なヘッダーを追加しますが、エラーが発生します “Response for preflight has invalid HTTP status code 404”

答えて

0

コントローラ内の関数に使用するルートとメソッドを指定する必要があります。 Startupクラス内でデフォルトマッピングを定義できます。

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

また、次のタグを使用して関数内で明示的にルートを宣言することもできます。

[EnableCors(origins:'*', headers>'*', methods:'*'); 
[HttpGet] 
[Route("printheads/")] 
public IActionResilt Index() 
{ 
    return new HttpOkObject("Hello, select your operation"); 
} 
+0

を[ルート( "/ operator")] –

+0

しかし、私はそれが必須のメソッドだと思います。そのルートを使用するHTTPメソッドを設定するには、[HttpGet]があることを確認してください。私は答えを編集 – acostela

+0

acostela、私はそれを試みたが、それは動作しませんでした。 –

0

は、次の操作を行って、それを解決:Setup.csで

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

の内側に次の行を追加します。それは で、既に存在だ


app.Use(async (context, next) => { context.Response.Headers.Append("Access-Control-Allow-Origin", "*"); await next(); }); 
app.Use(async (context, next) => { context.Response.Headers.Append("Access-Control-Allow-Methods", "*"); await next(); }); 
app.Use(async (context, next) => { context.Response.Headers.Append("Access-Control-Max-Age", "3600"); await next(); }); 
app.Use(async (context, next) => { context.Response.Headers.Append("Access-Control-Allow-Headers", "*"); await next(); }); 
関連する問題