2017-06-08 2 views
0

Ich habe mein Controller in C#C# gehosteten Rest Service Rückkehr 404

[ServiceContract(Name = "UserController")] 
public interface ApiController 
{ 
    Task<HttpResponseMessage> SignUp(LoginModel model); 

    Task<HttpResponseMessage> Login(LoginModel model); 


} 

namespace Nerder_Backend.Controllers 
{ 
    [RoutePrefix("api/user")] 
    public class UserController : ApiController 
    { 
     private readonly IBucket _bucket = ClusterHelper.GetBucket(ConfigurationManager.AppSettings.Get("CouchbaseUserBucket")); 
     private readonly string _secretKey = ConfigurationManager.AppSettings["JWTTokenSecret"]; 

     [Route("signup")] 
     [HttpPost] 
     public async Task<HttpResponseMessage> SignUp(LoginModel model) 
     { 
      if (model == null || !model.IsValid()) 
      { 
       HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.BadRequest) 
       { 
        Content = new StringContent("Invalid email and/or password") 
       }; 
       return response; 
      } 
implementiert

und dann versuche ich es zu hosten möglich sein, es über AJAX auf jquery zu nennen, weil meine App mobil sein Quer plaform und ich habe Client-Seite Serverseite zu trennen, wie auch immer, das ist das Hosting-main-Methode:

static void Main(string[] args) 
     { 


      var baseAddress = "http://localhost:8080"; 
      var config = new HttpSelfHostConfiguration(baseAddress); 
      CouchbaseConfig.Register(); 
      GlobalConfiguration.Configure(WebApiConfig.Register); 
      config.MapHttpAttributeRoutes();//map attribute routes 
              // Create the server 
      using (var server = new HttpSelfHostServer(config)) 
      { 
      server.OpenAsync().Wait(); 
      Console.WriteLine("The service is ready at {0}", baseAddress); 
      Console.WriteLine("Press <Enter> to stop the service."); 
      Console.ReadLine(); 
     } 
    } 

der Host-Start und es ist zu hören, aber wenn ich die URL über Javascript aufrufe bekomme ich eine 404-Fehlermeldung.

HTTP-Statuscode 404.

Dies ist der Javascript-Code:

$.ajax({ 
      type: 'post', 
      url: 'http://localhost:8080/api/user/signup', 

I CORS auch für Chrom Enabler verwendet, wie kann ich überprüfen, ob in irgendeiner Art und Weise mein Pfad gültig ist ? Sollte ich die Art ändern, in der ich meinen Service hosten?

Das ist mein app.config, ob es helfen kann:

<system.webServer> 
    <!-- ENABLE REST SERVICES --> 
    <httpProtocol> 
     <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
     <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> 
     </customHeaders> 
    </httpProtocol> 
    <!--END --> 
    </system.webServer> 

    <system.web> 
    <compilation debug="true" targetFramework="4.5.2" /> 
    <httpRuntime targetFramework="4.5.2" /> 
    </system.web> 
    <system.codedom> 
    <compilers> 
     <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" /> 
     <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" /> 
    </compilers> 
    </system.codedom> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Couchbase.NetClient" publicKeyToken="05e9c6b5a9ec94c2" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.4.5.0" newVersion="2.4.5.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <system.webServer> 
    <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" /> 
    </handlers> 
    </system.webServer> 
</configuration> 

Antwort

0

Wie werden Sie Ihren Hosting-Service?

Wie stellen Sie sicher, dass der Port tatsächlich 8080 ist, wenn der Dienst ausgeführt wird? - es könnte 404 Fehler geben, weil es der falsche Port ist

Wenn Ihr Dienst beispielsweise nur in Visual Studio existiert und Sie F5 drücken, um das Debuggen zu starten, und es automatisch ein neues Fenster für Sie in Ihrem Browser öffnet, und Sie sehen das Symbol "IIS Express" im unteren rechten Bereich der Taskleiste: Der Port kann variieren.