2016-03-29 9 views
8

Używamy aplikacji ASP napisanej przez zewnętrznego sprzedawcę. Mam za zadanie wprowadzić niewielką zmianę w aplikacji, ale nie wiem nic o aspie lub jsonie. Poprzez niektóre badania poskładałem to razem. W formularzu utworzyłem pole tekstowe i chcę przywrócić adres IP klienta do tego pola tekstowego. Napisałem funkcję, a następnie kontroler. Kod dla obu jest poniżej:Błąd powrotu JSON z ASP

Funkcja

function processgetip(event) { 
    // Within this function, make an AJAX call to get the IP Address 
    $.getJSON('@Url.Action("GetIPAddress","getipaddress")', function (ip) { 
     // When this call is done, your IP should be stored in 'ip', so 
     // You can use it how you would like 

     // Example: Setting a TextBox with ID "YourElement" to your returned IP Address 
     $("#facility").val(ip); 
    }); 
} 

Kontroler

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Net; 
    using System.Net.Http; 
    using System.Web.Http; 
    using System.Web; 
    using System.Web.Mvc; 

    namespace Parker_Hannifin.Controllers 
    { 
    public class getipaddressController : ApiController 
{ 
    public JsonResult GetIPAddress() 
    { 

     System.Web.HttpContext context = System.Web.HttpContext.Current; 

     string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

     if (!string.IsNullOrEmpty(ipAddress)) 
     { 
      string[] addresses = ipAddress.Split(','); 
      if (addresses.Length != 0) 
      { 
       //return addresses[0]; // 
       ipAddress = addresses[0]; 
      } 
     } 

     //replace ipaddress with ipAddress 
     return Json(ipAddress, JsonRequestBehavior.AllowGet); 
    } 


} 
    } 

Dostaję te błędy na tej linii kodu:

return Json(ipAddress, JsonRequestBehavior.AllowGet);

The pojawia się błąd:

Najlepszym przeciążona metoda mecz dla System.Web.Http.ApiController.Json (ciąg, Newtonsoft.Json.JsonSerializerSettings) ma pewne nieprawidłowe argumenty. nie można przekonwertować z System.Web.Mvc.JsonRequestBehavior do Newtonsoft.Json.JsonSerializerSettings

Jeśli ktoś może mi powiedzieć, co one oznaczają i jak je naprawić Będę bardzo wdzięczny.

+0

Drugi parametr do 'Json (...)' jest niepoprawny. Musisz zwrócić instancję [JsonResult] (https://msdn.microsoft.com/en-us/library/system.web.mvc.jsonresult (v = vs.118) .aspx), jeśli chcesz użyć ' JsonRequestBehavior.AllowGet'. –

+0

spróbuj zmienić publiczne jsonresult na publiczne działanie? –

+0

coś jest nie tak z twoim ciągiem ipAddress spróbuj umieścić prosty ciąg i sprawdź, czy twój json działa. Myślę, że twój ciąg zawiera coś w rodzaju ukośnika lub kropki, co może spowodować problem. – DarkVision

Odpowiedz

0

użycie ActionResult zamiast JsonResult

public ActionResult GetIPAddress() 
{ 

} 

można zobaczyć przykład here

10

Json w ApiController z dwoma parametrami ma podpis,

protected internal JsonResult<T> Json<T>(
T content, 
JsonSerializerSettings serializerSettings 
) 

Json w Controller z dwoma parametrami ma podpis:

protected internal JsonResult Json(
object data, 
JsonRequestBehavior behavior 
) 

getipaddressController odziedziczone ApiController, ale stosowane metody Controller Json. Użyj,

return new JsonResult() 
{ 
Data = ipAddress, 
JsonRequestBehavior = JsonRequestBehavior.AllowGet 
}; 

Jeśli nadal chcesz zachować zachowanie.

+0

Wymieniłem ten "return Json (ipAddress, JsonRequestBehavior.AllowGet);" Z "return new JsonResult() { Data = ipAddress, JsonRequestBehavior = JsonRequestBehavior.AllowGet } i błędy zniknęły, jednak gdy próbuję to przetestować, IE pobiera plik. Czy to jest problem w funkcji? – mulefeathers

+0

Dodałem typ zawartości do kodu powrotu. Nadal chce pobrać plik. Czego nie otrzymuję, to gdy usuwam wszystko, co dotyczy kodu json i powraca do oryginalnego kodu, od którego zacząłem, teraz chce też pobrać plik. – mulefeathers

Powiązane problemy